【发布时间】:2011-07-20 02:31:41
【问题描述】:
【问题讨论】:
【问题讨论】:
POSIX 方式
awk '/pattern1/ || /pattern2/{print}'
公平地说,我更喜欢 lhf 通过/pattern1|pattern2/ 提供的方式,因为它需要更少的输入来获得相同的结果。但是,我应该指出,这个模板不能用于逻辑与操作,因为你需要使用我的模板/pattern1/ && /pattern2/
【讨论】:
sed 进行简单的文本替换,如s/foo/bar/g 或者你有什么。对于您只想打印给定行的一部分的情况,对于大多数应用程序,我通常会使用awk,尽管sed 可以通过一些正则表达式来强制执行。如果您遇到任何处理任何“字段”意义的问题,无论分隔符是什么,在这种情况下,您几乎总是希望使用awk。此外,将awk 的输出通过管道传输到grep 是不正确的,反之亦然。你总是可以在awk 中组合这两个。
用途:
sed -nr '/patt1|patt2/p'
其中patt1 和patt2 是模式。如果您希望它们匹配整行,请使用:
sed -nr '/^(patt1|patt2)$/p'
您可以删除-r 并添加转义:
sed -n '/^\(patt1\|patt2\)$/p'
为了符合 POSIX。
【讨论】:
你为什么不想使用 grep?
grep -e 'pattern1' -e 'pattern2'
【讨论】:
-es,您将无法使用 Perl RegExp,例如 GNU 的 Grep 的 \d。
egrep 'pattern1|pattern2'这样的东西怎么样?
awk '/PATT1|PATT2/ { print }'
【讨论】: