You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用tr与awk提取文本内容仅得第一组数据,如何获取全部结果?

提取多组URL对应IP、邮箱和手机号的解决方案

需求场景

你有一个包含多组数据的文本文件,格式如下:

URL: http://123.123.123.123
file: php
124.124.124.124|user1|email|phone

URL: http://1.2.3.4
file: php
2.1.3.1|userx|emailx|phonex

需要提取每组中URL对应的IP、数据行里的邮箱和手机号,输出格式为 IP:邮箱:手机号。

原命令问题分析

你原本使用的命令:

grep http -A 3|tr '\n' ' '|tr '|' ' '|awk '{print $2,$7,$8}'|tr ' ' ':'

问题在于tr '\n' ' '把所有行的内容合并成了一整行,awk仅处理这一行,只能输出第一组的结果。

推荐解决方案:用awk直接处理文件

awk可以直接遍历整个文件,分别捕获URL的IP和数据行的目标字段,匹配到数据行时直接输出组合结果,更高效准确:

awk '
/URL:/ {
    # 从http://后提取IP,跳过前8个字符("http://"长度)
    ip = substr($2, 8)
}
/|/ {
    # 按|分割数据行,取第3个(邮箱)和第4个(手机号)字段
    split($0, parts, "|")
    print ip ":" parts[3] ":" parts[4]
}' 你的文件名.txt

管道链调整方案(仅作参考)

如果坚持用管道组合命令,需要避免合并所有行,而是将每组的URL行和数据行配对处理:

grep -E "URL:|.*\|.*\|.*\|.*" 你的文件名.txt | paste - - | awk '{
    split($1, url_parts, "://"); 
    ip = url_parts[2]
    split($2, data_parts, "|")
    print ip ":" data_parts[3] ":" data_parts[4]
}'

这里grep筛选出URL行和数据行,paste - -把相邻的URL行和数据行合并为一行,再用awk分割提取所需内容。

内容的提问来源于stack exchange,提问作者Testdev01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 01:36:01