Grep for a words然后grep下一个出现的单词

时间:2014-11-10 03:34:20

标签: shell grep

我想grep一个字。然后,我想打印下一个匹配的行。

例如:输入文件

AAAA
BBBB
CCCC
BBBB
CCCC
EEEE
AAAA
WWWW
CCCC

输出

AAAA                        
CCCC              
AAAA  
CCCC

我希望每次都先搜索AAAA,然后在CCCC之后打印第一行。如果可能,请使用grep帮助。

1 个答案:

答案 0 :(得分:1)

回答修订问题

使用此作为样本文件:

$ cat file2
AAAA
BBBB
CCCC
BBBB
CCCC
EEEE
AAAA
WWWW
CCCC

要打印包含AAAA的每一行,然后打印包含CCCC的第一行,请使用:

$ sed -n '/AAAA/,/CCCC/ {/AAAA/p;/CCCC/p}' file2
AAAA
CCCC
AAAA
CCCC

回答原始问题

  

“我想首先搜索AAAA,然后用CCCC打印第一行。”

使用此作为样本文件:

$ cat file
AAAA
BBBB
CCCC
BBBB
CCCC
EEEE

匹配包含CCCC的第一行之后出现的包含AAAA的第一行:

$ sed -n '/AAAA/,$ {/CCCC/{p;q}}' file
CCCC

工作原理:

  • -n

    这告诉sed除非我们明确要求,否则不要打印任何内容。

  • /AAAA/,$ {/CCCC/{p;q}}

    /AAAA/,$是一个范围。它指定只有当我们在匹配AAAA的行和文件中的最后一行(表示为$)之间执行大括号后面的命令时才会执行。

    /CCCC/是另一个条件。它告诉sed仅当我们在匹配CCCC的行上时执行以下命令。

    {p;q}是一组两个命令。 p告诉sed打印当前行。 q告诉sed退出(因此不会再读取或匹配其他行)。