parsing - 一起使用 grep -A 和 -v 开关
问题描述
grep -v
反转匹配,以便我可以从输入/文件中排除行。
如果模式匹配,是否可以排除两行?
printf "foo\nbar\nbaz\n" | grep -A1 -v foo
不起作用。我希望这段代码只输出baz
,但它输出
bar
baz
解决方案
,-A
和标志导致为满足搜索条件-B
的-C
每一行打印指定数量的上下文行。当您使用-v
时,搜索条件是反转的,因此所选行是那些与模式不匹配的行。因此,grep -A1 -v foo
打印所有不包含foo
的行,以及不包含的行之后的行foo
。
我知道这不是您要寻找的,但它grep
是指定的工作方式。据我所知,没有选项可以在模式匹配后抑制线条的打印。
但是,使用以下方法很容易完成这一壮举awk
:
awk '/foo/{c=2} c{c--;next;} 1'
请注意,awk
使用 Posix 扩展正则表达式,例如grep -E
. 正则表达式必须用斜杠包围,这意味着您需要反斜杠转义任何需要匹配的斜杠。除此之外,它将与grep
.
推荐阅读
- vulkan - Vulkan:(MSAA)仅解析子通道的一些颜色附件
- html - 自定义域不指向 Heroku 项目
- sql - Postgres:有条件地添加到表中
- c# - 第二个摄像头的 Unity 摄像头平移不起作用
- r - 汇总表中重复测量方差分析的唯一行
- wcf - WCF WebSocket 服务需要安全 TLS/SSL WSS
- regex - Raku 中的否定命名正则表达式或字符类插值
- reactjs - 过滤组件中的 useContext 状态而不更改全局状态
- ruby-on-rails - 如何在标签中使用嵌套属性的翻译,以便我只维护一个翻译?
- reactjs - 在 React 应用程序中,前端是接收原始的 React 代码还是纯 html?