2011-05-06 35 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命令模式下,您可以在字符串中插入任意換行符。