2011-05-06 86 views
6

我想在文件上grep 2模式Solaris UNIXSolaris - 具有OR功能的grep

也就是说grep的 '式样1 OR模式2' 的文件名。

下面的命令不起作用:

grep 'pattern1\|pattern2' filename

什么是错的这个命令?

注:我在Solaris

回答

0

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

+1

模式只是一个词,我在unix solaris机器上工作。 – user742004 2011-05-07 00:14:46

0

这应该是正确的。确保你有或没有添加适当的空格,即“pattern1 \ | pattern2”与“pattern1 \ | pattern2”。

你确定你不只是有案件或什么问题?尝试-i开关。

+1

'\ |'不适用于Solaris ... – jahroy 2013-01-10 20:14:54

0

这完全取决于什么模式1和模式2是。如果他们只是文字,它应该工作,否则你需要:

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

模式只是单词,它表示未知的转义序列'\ |' – user742004 2011-05-07 00:13:46

+0

'\ |'在Solaris上不起作用... – jahroy 2013-01-10 20:14:30

15

你是什么操作系统?

它,以与GNU grep的系统工作,但在BSD,Solaris等,不支持\|

尝试egrepgrep -E,例如

egrep 'pattern1|pattern2' 
+0

egrep正常工作。谢谢 – user742004 2011-05-07 00:19:13

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

使用fgrep使用古方法(即:固定的字符串),其在Solaris 10作品...

提供一个模式列表,与用换行分隔的每个模式,但引用以便可由shell解释为一个字: -

fgrep 'pattern1 
pattern2' filename 

这种方法也适用于grepfgrep/usr/xpg4/binegrep,虽然管道分隔ERE任何egrep有时是最不挑剔的。

如果您的shell允许历史编辑,例如:在bash问题C-v C-j处于emacs模式或vi命令模式下,您可以在字符串中插入任意换行符。