Grep-具有单独上下文的复合语句? 请考虑以下例子: $ 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

Grep-具有单独上下文的复合语句? 请考虑以下例子: $ 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,grep,Grep,我想在上面做的是,当-wordA在行首匹配时,有1行“after-context”,当-wordB匹配时,有2行after-context。显然,我的尝试不起作用,因为在两个匹配中,我都得到了两行后上下文 显然,后上下文的最后一个设置将成为所有搜索的设置;但我只是想确定一下,是否有可能使用grep进行这种针对个别上下文的“复合”搜索?(编辑:特别是,我指的是调用grep的单个实例,可能避免使用临时文件) 非常感谢您的回答, 干杯 我不知道如何使用grep(1)。我相信我已经写了一个小的awk脚本

我想在上面做的是,当
-wordA
在行首匹配时,有1行“after-context”,当
-wordB
匹配时,有2行after-context。显然,我的尝试不起作用,因为在两个匹配中,我都得到了两行后上下文

显然,后上下文的最后一个设置将成为所有搜索的设置;但我只是想确定一下,是否有可能使用
grep
进行这种针对个别上下文的“复合”搜索?(编辑:特别是,我指的是调用
grep
的单个实例,可能避免使用临时文件)

非常感谢您的回答,

干杯

我不知道如何使用
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
$ 

我已经任意换行以确保易读性——当然,您需要使其完全适合。

假设当前目录中没有output1 output2文件,这是一个使用grep的解决方案

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

谢谢你,@sarnold-看起来很棒!我会把这个问题留一段时间,看看是否不会出现
grep
本机答案-否则这个答案对我来说是可以接受的;再次感谢-干杯!这是一个好计划;我不知道如果
-wordA
-wordB
是背对背的,还是在对方的打印空间内,这样做是否正确。我假设
grep(1)
可以更优雅地处理这个问题——如果它可以在
grep(1)
中完成的话——但如果不能,这应该是一个值得的起点;我更感兴趣的是“本机”使用(意味着
grep
(一行代码)的单个实例,并且没有临时文件);现在编辑问题。再次感谢-干杯!