grep与string1或string2匹配

问题描述 投票:6回答:6

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

那就是grep'pattern1或pattern2'文件名。

以下命令不起作用:

grep 'pattern1\|pattern2' filename

这个命令有什么问题?

注意:我在Solaris上

grep solaris
6个回答
17
投票

你在用什么操作系统?

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

试试egrepgrep -E,例如

egrep 'pattern1|pattern2'

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

0
投票

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


0
投票

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

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


0
投票

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

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

0
投票

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

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

fgrep 'pattern1
pattern2' filename

这种方法也适用于grep中的fgrepegrep/usr/xpg4/bin,尽管任何egrep中管道划分的ERE有时是最不挑剔的。

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

© www.soinside.com 2019 - 2024. All rights reserved.