grep与string1或string2匹配

时间:2011-05-06 23:53:58

标签: grep solaris

我想在 Solaris UNIX 上的文件中grep 2个模式。

即grep'pattern1 OR pattern2'filename。

以下命令不起作用:

grep 'pattern1\|pattern2' filename

这个命令出了什么问题?

注意:我在Solaris上

6 个答案:

答案 0 :(得分:16)

你在使用什么操作系统?

它适用于具有GNU grep的系统,但在BSD,Solaris等上,不支持\|

尝试egrepgrep -E,例如

egrep 'pattern1|pattern2'

答案 1 :(得分:2)

如果您想要POSIX功能(即类似Linux的行为),您可以将POSIX 2兼容的二进制文件放在路径的开头:

$ echo $PATH
/usr/xpg4/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:[...]

还有/ usr / xpg6兼容POSIX 1。

/usr/bin: SVID/XPG3
/usr/xpg4/bin: POSIX.2/POSIX.2a/SUS/SUSv2/XPG4
/usr/xpg6/bin: POSIX.1-2001/SUSv3

答案 2 :(得分:0)

这个命令对我来说很好。请添加其他信息,例如您的平台以及您正在使用的确切正则表达式和文件内容(最小化到仍然重现问题的最小示例)。 (我会在你的帖子上添加评论,但没有足够的声誉。)

答案 3 :(得分:0)

那应该是正确的。确保您添加或不添加适当的空格,即“pattern1 \ | pattern2”vs“pattern1 \ | pattern2”。

你确定你不只是遇到案件或其他问题吗?试试-i开关。

答案 4 :(得分:0)

这完全取决于pattern1和pattern2是什么。如果它们只是单词,它应该有用,否则你需要:

grep '\(pattern1\)\|\(pattern2\)'

答案 5 :(得分:0)

使用fgrep(即:固定字符串)的奥术方法适用于Solaris 10 ...

提供一个模式列表,每个模式由NEWLINE分隔,但引用以便shell将其解释为一个单词: -

fgrep 'pattern1
pattern2' filename

此方法也适用于grep中的fgrepegrep/usr/xpg4/bin,但任何egrep中以竖线分隔的ERE有时是最不挑剔的

如果shell允许进行历史编辑,则可以在字符串中插入任意换行符,例如:在emacs模式或vi-command模式下的bash issue C-v C-j中。