使用sed/awk打印具有匹配图案或其他匹配图案的行

使用sed/awk打印具有匹配图案或其他匹配图案的行,awk,sed,bash,Awk,Sed,Bash,我需要打印一个文件中的行匹配的模式或不同的模式使用或。我觉得这是一项简单的任务,但我似乎找不到答案。有什么想法吗?使用: sed -nr '/patt1|patt2/p' 其中patt1和patt2是模式。如果希望它们与整行匹配,请使用: sed -nr '/^(patt1|patt2)$/p' 您可以删除-r并添加转义: sed -n '/^\(patt1\|patt2\)$/p' 用于POSIX合规性。POSIX方式 awk '/pattern1/ || /pattern2/{prin

我需要打印一个文件中的行匹配的模式或不同的模式使用或。我觉得这是一项简单的任务,但我似乎找不到答案。有什么想法吗?

使用:

sed -nr '/patt1|patt2/p'
其中
patt1
patt2
是模式。如果希望它们与整行匹配,请使用:

sed -nr '/^(patt1|patt2)$/p'
您可以删除
-r
并添加转义:

sed -n '/^\(patt1\|patt2\)$/p'
用于POSIX合规性。

POSIX方式

awk '/pattern1/ || /pattern2/{print}'
编辑
公平地说,我更喜欢lhf通过
/pattern1 | pattern2/
实现的方式,因为它需要更少的输入才能获得相同的结果。但是,我应该指出,此模板不能用于逻辑和操作,因为您需要使用我的模板,即/pattern1/&&/pattern2/
awk'/PATT1 | PATT2/{print}
为什么不想使用grep

grep -e 'pattern1' -e 'pattern2'

谢谢,这很有效。我永远无法确定sed或awk是否适合于给定的任务。我错过了什么大的不同吗?还是用不同的方法做同一件事?@rick,是的。awk是一种编程语言。sed实际上并不那么实际。(尽管图灵图则完整)。@rick I通常只使用
sed
进行简单的文本替换,如
s/foo/bar/g
或您所拥有的内容。对于只想打印给定行的一部分的情况,我通常会在大多数应用程序中使用
awk
,尽管
sed
可以通过一些正则表达式强制执行。如果您曾经遇到过处理任何意义上的“字段”的问题,不管分隔符是什么,在这种情况下,您几乎总是希望使用
awk
。此外,将
awk
的输出通过管道传输到
grep
是不正确的,反之亦然。您总是可以在
awk
中组合这两个选项。一个可能的原因是“P选项只支持一个模式”,因此对于多个
-e
s,您将无法将诸如\d之类的Perl RegExp与GNU的Grep一起使用。类似于
egrep'pattern1 | pattern2'
的东西怎么样?