使用模式grep一块文本

时间:2017-02-08 21:58:32

标签: regex bash shell pattern-matching regular-language

我有短文本文件,我应该使用特殊模式输出数据。我的档案:

)

逐个,从test1到test2再到test3。所以......我写了这个命令:

99 test1
88 test2
10 test3
11 test1
12 test1
13 test2
14 test3
17 test1
18 test4

在输出中我有结果:

sed '/test1.*\|test2.*\|test3/!d' filename

在这种情况下,我有线,我不需要:

99 test1
88 test2
10 test3
11 test1
12 test1
13 test2
14 test3
17 test1

这条线不是一个接一个。我怎么做结果,我需要?请帮我。感谢您的关注。我应该得到这个结果:

11 test1

17 test1

1 个答案:

答案 0 :(得分:0)

一个简单快捷的方法,虽然不是很优雅,但是将它放在一行中,以所需的模式打破它,然后再用模式过滤它:

sed ':a;N;$!ba;s/\n/\\n/g' < filename | \
sed 's/\([0-9][0-9] test1\\n[0-9][0-9] test2\\n[0-9][0-9] test3\\n\)/\n\1\n/g' | \
egrep "[0-9][0-9] test1\\\n[0-9][0-9] test2\\\n[0-9][0-9] test3\\\n" | \
sed 's/\\n/\n/g' | grep .