-1

每当它看到一个模式; 和 abc[0] 我需要在之后打印第一行;和包含 abc[0] 的行。

我有这样的东西

blah blah;
blah blah blah;
xyz blah blah,
blah blah
abc[2]
abc[1],
abc[0]
blah blah,
blah blah
abc[1],
abc[0]
blah blah
blah blah;
pqr blah blah
blah blah blah
abc[0]

所需的输出如下所示

xyz blah blah,
abc[0]
pqr blah blah
abc[0]

谢谢。

4

3 回答 3

1
awk '/;/ { f=1; next } f{ print $0 ; f=0; next} /abc\[0\]/ { print }' inputfile

解释:

/;/ { f=1; next } - Set the flag to 1 when you encounter a line with `;` pattern. 
Since I believe you want to print the line after the `;` and not one with the `;` 
you do next to skip the entire pattern action statements

f{ print $0 ; f=0; next} - If the flag is true, you print the line, set the flag to false    
and skip the rest. 

/abc\[0\]/ { print } - If you find the second pattern you print it. 
于 2013-05-24T19:28:01.120 回答
0

使用 GNU grep

将您问题的输入存储为/tmp/corpus,以下内容将通过过滤掉上下文行来提供正确的输出。

{ egrep -A1 ';|abc\[0\]' | egrep -v ';|^--'; } < /tmp/corpus

如果您有 GNU Grep,但您的 shell 不是 Bash 或不支持上述重定向,则以下管道是等效的,但(在我看来)可读性较差:

egrep -A1 ';|abc\[0\]' /tmp/corpus | egrep -v ';|^--'
于 2013-05-24T20:11:32.463 回答
0

纯 GNU sed

sed -n '/;/ {:kn;h; // bk}; /abc\[0\]/ {x ;//! {p;x;p;x}}' 文件

xyz胡说八道,
ABC[0]
pqr 废话
ABC[0]
于 2013-05-24T20:41:05.260 回答