sed命令 - 正则表达式和行计数

时间:2014-11-03 15:40:21

标签: regex sed

我的文件内容如:

E error1
error1.2
error1.3
error1.4
error1.5

E error2
error2.2
error2.3
error2.4
error2.5

E error1
error1.2
error1.3
error1.4
error1.5

S not error

我想返回与“E错误”相匹配的任何内容以及之后的4行。我可以用'sed'作首次出现:

sed -n '/E/,5p'

但这只返回第一次出现'E error'的5行。我需要它为所有出现 我还想重复数据删除,然后计算每种类型的总数,并在5行返回下面打印出'E error1'的出现次数。

希望有意义!

4 个答案:

答案 0 :(得分:2)

使用grep及其-A(之后)选项:

grep -A4 'E error' file

要获得每种类型的计数,您可以

grep 'E error' file | sort | uniq -c

答案 1 :(得分:2)

这里有一个awk,你会在点击模式后获得下一个四行:

awk '/E error/{_=5}_-->0' file
E error1
error1.2
error1.3
error1.4
error1.5
E error2
error2.2
error2.3
error2.4
error2.5
E error1
error1.2
error1.3
error1.4
error1.5

或者你可以使用它:

awk '/E error/{_=5}_&&_--' file

PS,_仅用于娱乐,但就像任何awk变量名一样。为了使其更具可读性:

awk '/E error/{c=5} c && c--' file

答案 2 :(得分:1)

sed -n '/E error/,+4p' inputFile

将输出显示为

E error1
error1.2
error1.3
error1.4
error1.5
E error2
error2.2
error2.3
error2.4
error2.5
E error1
error1.2
error1.3
error1.4
error1.5

它的作用是什么?

-n禁止自动打印模式空间

'/E/,+4匹配其后跟E4行出现的行

p打印当前模式空间

答案 3 :(得分:0)

您的输入文件在记录之间有一个空行,因此只需将awk记录分隔符设置为匹配,您只需要:

awk -v RS= '/^E error/' file