使用后我得到了我的研究结果sed:
zcat file* | sed -e 's/.*text=\(.*\)status=[^/]*/\1/' | cut -f 1 - | grep "pattern"
Run Code Online (Sandbox Code Playgroud)
但它只显示了我削减的部分.如何在比赛后打印所有线?
我正在使用zcat所以我不能使用awk.
谢谢.
编辑:
这是我的日志文件:
[01/09/2015 00:00:47] INFO=54646486432154646 from=steve idfrom=55516654455457 to=jone idto=5552045646464 guid=100021623456461451463 n
um=6 text=hi my number is 0 811 22 1/12 status=new survstatus=new
Run Code Online (Sandbox Code Playgroud)
我的目的是找到所有用他们的电话号码(使用grep "pattern")垃圾邮件我的网站的用户,然后打印所有行以获取有关每个垃圾邮件的所有信息.问题是INFO或id中可能存在匹配,因此我首先使用它sed来获取文本.
JB.*_*JB. 32
匹配后打印所有行sed:
$ sed -ne '/pattern/,$ p'
# alternatively, if you don't want to print the match:
$ sed -e '1,/pattern/ d'
Run Code Online (Sandbox Code Playgroud)
模式匹配"text ="和"status ="之间的过滤行可以通过简单的方式完成grep,不需要sed和cut:
$ grep 'text=.*pattern.* status='
Run Code Online (Sandbox Code Playgroud)
也许这就是您真正想要的?查找与“模式”匹配的行,并在text=之前之前提取出字段status=?
zcat file* | sed -e '/pattern/s/.*text=\(.*\)status=[^/]*/\1/'
Run Code Online (Sandbox Code Playgroud)
您没有透露pattern实际的含义-如果它是一个变量,则不能在其周围使用单引号。
注意,在您的示例中这\(.*\)status=[^/]*将完全匹配survstatus=new。那可能不是您想要的吗?似乎在status=任何地方都不会出现斜线-您确实应该更详细地说明您实际要完成的工作。
您的问题标题是“比赛后的所有比赛”,所以也许您想要比赛后的所有比赛text=?那就是
sed 's/.*text=//'
Run Code Online (Sandbox Code Playgroud)
即text=,一无所获,并保留其余部分。(我相信您可以弄清楚如何将周围的脚本更改为zcat file* | sed '/pattern/s/.*text=//'...哎呀,也许我的信任失败了。)