Sed:匹配后打印所有行

goo*_*ead 7 regex unix sed

使用后我得到了我的研究结果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,不需要sedcut:

$ grep 'text=.*pattern.* status='
Run Code Online (Sandbox Code Playgroud)

  • / pattern /之后的每一行. (2认同)

kar*_*kfa 6

或者你可以使用 awk

awk '/pattern/,EOF'
Run Code Online (Sandbox Code Playgroud)

也许也可以与awk中的所有先前操作结合使用。


tri*_*eee 6

也许这就是您真正想要的?查找与“模式”匹配的行,并在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=//'...哎呀,也许我的信任失败了。)