用sed查找图案,打印行直到第一个空行

时间:2014-07-17 10:47:51

标签: search sed grep find

我试图在logcat中找到一个特定的PID并打印所有行直到下一个空行。 logcat看起来像这样。

[ 07-17 11:15:14.003   483:  515 D/SensorService ]
Message

[ 07-17 11:15:15.300 20220:20225 D/dalvikvm ]
Message

[ 07-17 11:15:17.519   483:  515 D/SensorService ]
Message

我找到了解决这个问题的方法是:

sed -n '/pattern/,/^$/p' logcat

在这个例子中,我想这样做

sed -n '/20220/,/^$/p' logcat

然而,我无法让它发挥作用。它实际上打印整个logcat而不是过滤它。当我执行

sed -n '/pattern/p' logcat

它的工作方式与预期的一样(如grep),但仅占用第一行。在我的理解中,^代表一行的开头和$结尾,从而使^ $成为空行。

对于如何解决这个问题的任何意见,我将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:4)

通过awk,

$ awk '/20220/{p=1}/^ *$/{p=0}p' file
[ 07-17 11:15:15.300 20220:20225 D/dalvikvm ]
Message

通过sed,

$ sed -n '/20220/,/^ *$/p' file
[ 07-17 11:15:15.300 20220:20225 D/dalvikvm ]
Message

但是上面的sed命令也会打印出空行。

答案 1 :(得分:1)

我认为文件中还有其他一些空格字符,例如\t

使用sed -n -r '/20220/,/^\s*$/p'试一试。