找到一些文字aa然后在aa之后找到文本bb的第一次出现

时间:2013-04-22 18:34:06

标签: linux sed awk grep

整个文本文件如下:

aa
...
bb
...
bb
...
aa
...
bb
...

aa行后,会有一行或多行bb

我尝试了下面的命令,该命令会对所有行aaaa上方的行进行细化。

grep -A 1 aa fileName

如何打印所有行aa以及aa上方的行[{1}}以及行bb后面的第aa行以及此bb上方的行线?

已修改:需要为bb的每次出现找到第一行(且仅第一行)aa行,同时打印出行号。也许我会重新定义问题:对于每一行aa,在bb之后找到第一行aa,然后打印出行aabb以及它们上面的行,也有行号。

考虑下面的输入文件,第一列是行号,它不是输入文件的一部分

1 xxx
2 aa
3 xxxx
4 bb
5 bb
6 xxxx
7 aa
8 xxxx
9 xxxx
10 xxxx
11 bb
12 xxx
13 aa
14 xxx
15 bb

我想要输出:

1 xxx
2 aa
3 xxxx
4 bb
6 xxxx
7 aa
10 xxxx
11 bb
12 xxx
13 aa
14 xxx
15 bb

2 个答案:

答案 0 :(得分:1)

这将完成这项工作:

awk '/aa/{f=1}/aa|bb/&&f{printf "%d %s\n%d %s\n",NR-1,a,NR,$0}{a=$0}/bb/{f=0}' 

答案 1 :(得分:0)

命令

grep -C 1 aa fileName

将打印带有aa的所有行以及

之前和之后的行