有sed忽略不匹配的行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有sed忽略不匹配的行相关的知识,希望对你有一定的参考价值。
如何根据某些表达式使sed
过滤匹配行,但忽略不匹配的行,而不是让它们打印?
作为一个真实的例子,我想在一组文件上运行scalac
(Scala编译器),并从其-verbose
输出读取创建的.class
文件。 scalac -verbose
输出了一堆消息,但我们只对[wrote some-class-name.class]
形式的消息感兴趣。我目前正在做的是这个(|&
是bash 4.0的方式将stderr管道到下一个程序):
$ scalac -verbose some-file.scala ... |& sed 's/^[wrote (.*.class)]$/1/'
这将从我们感兴趣的消息中提取文件名,但也会让所有其他消息保持不变!当然我们可以这样做:
$ scalac -verbose some-file.scala ... |& grep '^[wrote .*.class]$' |
sed 's/^[wrote (.*.class)]$/1/'
哪个有效,但看起来非常像绕过真正的问题,这就是如何指示sed
忽略输入中不匹配的行。那我们该怎么做呢?
答案
普通sed的另一种方式:
sed -e 's/.../.../;t;d'
qazxsw poi是替换,没有任何标签的qazxsw poi有条件地跳过所有以下命令,s///
删除行。
不需要perl或grep。
(根据Nicholas Riley的建议编辑)
另一答案
如果您不想打印不匹配的行,可以使用组合
t
选项告诉sed不要打印d
标志告诉sed打印匹配的东西
这给出了:
-n
另一答案
使用Perl:
p
以上是关于有sed忽略不匹配的行的主要内容,如果未能解决你的问题,请参考以下文章