简体   繁体   中英

How to use command grep with several lines?

With a shell script I'm looking for a way to make the grep command do one of the following two options:

a) Use the grep command to display the following 10 lines of a match in a file; ie, the command grep "pattern" file.txt will result in all lines of the file that has that pattern:

patternrestoftheline

patternrestofanotherline

patternrestofanotherline

...

So I'm looking for this:

patternrestoftheline

following line

following line

...

until the tenth

patternrestofanotherline

following line

following line

...

until the tenth

b) Use the grep command to display all lines within two patterns as if they were limits

patternA restoftheline

anotherline

anotherline

...

patternB restoftheline

I do not know if another command instead of grep is a better option. I'm currently using a loop that solves my problem but is line by line, so with extremely large files takes too much time.

I'm looking for the solution working on Solaris. Any suggestions?

In case (a), What do you expect to happen if the pattern occurs within the 10 lines?

Anyway, here are some awk scripts which should work (untested, though; I don't have Solaris):

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

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

The second one can also be done similarly with sed

For your first task, use the -A ("after") option of grep :

grep -A 10 'pattern' file.txt 

The second task is a typical sed problem:

sed -ne '/patternA/,/patternB/p' file.txt 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM