2010-07-06 31 views
2

我是工作在Linux中A和I運行此:grep和正則表達式:不一致的行爲

grep '^\S*\s-' access_log 

這顯示一些線,符合市場預期。

然後我搬到了機器B,然後我啓動了完全相同的命令。但是這一次它不起作用。
我不得不爲了推出這項得到完成我需要的東西:

grep '^[^ ]* -' access_log 

之前成功,我想所有的這些,但沒有運氣:

grep '^\S* -' access_log 
grep '^\S*\s-' access_log  
grep -e '^\S* -' access_log 
grep -E '^\S* ' access_log  

它看起來像機器B沒有按」瞭解元字符\ S和\ S。

兩個箱子的正在運行:grep的2.5.1和3.2.25慶典

這怎麼可能?

乾杯, 丹

回答

1

grep man page來看。看起來,如果你可以使用諸如\s之類的東西,那麼你正在使用Perl正則表達式。當-P選項傳遞給grep時使用哪個選項。所以可能是該選項在機器A上自動設置,而不是在機器B上。原因可能是某個別名,或者該選項在GREP_OPTIONS中設置。