我想在 Solaris UNIX 上的文件中grep 2个模式。
即grep'pattern1 OR pattern2'filename。
以下命令不起作用:
grep 'pattern1\|pattern2' filename
这个命令出了什么问题?
注意:我在Solaris上
答案 0 :(得分:16)
你在使用什么操作系统?
它适用于具有GNU grep的系统,但在BSD,Solaris等上,不支持\|
。
尝试egrep
或grep -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
中的fgrep
,egrep
和/usr/xpg4/bin
,但任何egrep
中以竖线分隔的ERE有时是最不挑剔的
如果shell允许进行历史编辑,则可以在字符串中插入任意换行符,例如:在emacs模式或vi-command模式下的bash
issue C-v C-j
中。