具有多个上下文的多个模式?
我希望 grep 搜索两种模式,并为每个匹配输出不同的上下文行:例如,当它匹配“警告”时,输出前 1 行和后 1 行 - 当它匹配“错误”时,输出前 1 行,之后 2 行;所以我尝试了这个:
$ echo -ne "1\n2\n3\n4\nwarning\n5\n6\n7\n8\nerror\n9\n10\n11\n12\n" | grep -e "warning" -A 1 -B 1 -e "error" -B 1 -A 2
4
warning
5
6
--
8
error
9
10
...但是,不幸的是它不起作用 - 显然,只有最后的 -B
/-A
参数对所有模式都有效。
有谁知道如何为每个搜索模式实现单独的上下文?
I want grep to search for two patterns, and output different lines of context for each match: e.g, when it matches "warning", output 1 line before and 1 line after - and when it matches "error", output 1 line before, and 2 lines after; so I tried this:
$ echo -ne "1\n2\n3\n4\nwarning\n5\n6\n7\n8\nerror\n9\n10\n11\n12\n" | grep -e "warning" -A 1 -B 1 -e "error" -B 1 -A 2
4
warning
5
6
--
8
error
9
10
... however, unfortunately it doesn't work - apparently, only the final -B
/-A
arguments are effectuated for all patterns.
Does anyone have an idea how to achieve separate context for each search pattern?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
使用
sed
的这个变体怎么样?其中
x
表示交换保持空间和模式空间的内容,p
表示打印当前模式空间n
表示将下一行输入读取到模式空间h
表示将模式空间复制到保存空间sed -n
表示抑制模式空间的自动打印(即仅在发生p
时打印)What about this variant using
sed
?Where
x
means Exchange the contents of the hold and pattern spaces,p
means Print the current pattern spacen
means Read the next line of input into the pattern spaceh
means Copy pattern space to hold spacesed -n
means suppress automatic printing of pattern space (i.e. print only whenp
occurs)