0

使用 shell 脚本,我正在寻找一种使 grep 命令执行以下两个选项之一的方法:

a) 使用 grep 命令显示文件中匹配的以下 10 行;即,该命令grep "pattern" file.txt将导致具有该模式的文件的所有行:

patternrestoftheline

patternrestofanotherline

patternrestofanotherline

...

所以我正在寻找这个:

patternrestoftheline

following line

following line

...

until the tenth

patternrestofanotherline

following line

following line

...

until the tenth

b) 使用 grep 命令显示两个模式中的所有行,就好像它们是限制一样

patternA restoftheline

anotherline

anotherline

...

patternB restoftheline

我不知道另一个命令而不是 grep 是否是更好的选择。我目前正在使用一个循环来解决我的问题,但是是逐行的,所以对于非常大的文件需要太多时间。

我正在寻找适用于 Solaris 的解决方案。有什么建议么?

4

2 回答 2

1

在情况 (a) 中,如果模式出现在 10 行内,​​您期望会发生什么?

无论如何,这里有一些应该可以工作的 awk 脚本(但未经测试;我没有 Solaris):

# pattern plus 10 lines
awk 'n{--n;print}/PATTERN/{if(n==0)print;n=10}'

# between two patterns
awk '/PATTERN1/,/PATTERN2/{print}'

第二个也可以类似地完成sed

于 2013-05-24T17:46:44.073 回答
-1

对于您的第一项任务,请使用-A("after") 选项grep

grep -A 10 'pattern' file.txt 

第二个任务是一个典型的sed问题:

sed -ne '/patternA/,/patternB/p' file.txt 
于 2013-05-24T17:45:44.423 回答