请考虑以下示例:
$ echo -e "-wordA \n 1\n 2\n 3\n-wordB \n 1\n 2\n 3\n" | grep -n -A1 -e '^-wordA' -A2 -e '^-wordB'
1:-wordA
2- 1
3- 2
--
5:-wordB
6- 1
7- 2
我上面要做的是,当-wordA
在行首时匹配时,有1行“后上下文”,当-wordB
匹配时,有2行后上下文。显然,我的尝试不起作用,因为在两场比赛中,我获得了2行上下文。
显然,在上下文的最后一个设置中,成为所有搜索的设置;但我只是想确定 - 是否可以使用grep
进行具有单独上下文的“复合”搜索? (编辑:特别是,我的意思是通过调用grep
的单个实例来使用,可能会避免临时文件)
非常感谢任何答案,
干杯!
答案 0 :(得分:2)
我不知道如何使用grep(1)
执行此操作。我相信我已经写了一个小awk
脚本来做你想要的事情;试试这个:
$ echo -e "-wordA \n 1\n 2\n 3\n-wordB \n 1\n 2\n 3\n" |
awk '/^-wordA/ {print; getline; print;}
/^-wordB/ {print; getline; print; getline; print;}'
-wordA
1
-wordB
1
2
$
我为了易读性而任意包裹线条 - 当然,你需要使它完全合适。
答案 1 :(得分:1)
使用grep的解决方案,假设当前目录中没有output1 output2文件
echo -e "-wordA \n 1\n 2\n 3\n-wordB \n 1\n 2\n 3\n" | tee >(grep -n -A1 -e '^-wordA' >output1) >(grep -n -A2 -e '^-wordB' >output2) >/dev/null ; cat output1 output2