echo abc123def | grep -o '[0-9]*'
在一臺計算機(與GNU grep的2.5.4),這將返回123
,並在另一個(與GNU grep的2.5.1),它返回一個空字符串。有沒有解釋爲什麼grep 2.5.1在這裏失敗,還是隻是一個錯誤?我使用grep -o
這種方式在一個bash腳本中,我希望能夠在不同的計算機(可能有不同版本的grep)上運行。是否有「正確的方法」來獲得一致的行爲?
echo abc123def | grep -o '[0-9]*'
在一臺計算機(與GNU grep的2.5.4),這將返回123
,並在另一個(與GNU grep的2.5.1),它返回一個空字符串。有沒有解釋爲什麼grep 2.5.1在這裏失敗,還是隻是一個錯誤?我使用grep -o
這種方式在一個bash腳本中,我希望能夠在不同的計算機(可能有不同版本的grep)上運行。是否有「正確的方法」來獲得一致的行爲?
是,2.5.1的-o
處理是越野車: http://www.mail-archive.com/[email protected]/msg00993.html
grep的大概不是這個合適的工具; sed
或甚至perl
可能會更好取決於實際任務是什麼。
你可以使用shell。其更快
$ str=abc123def
$ echo ${str//[a-z]/}
123
我有同樣的問題,發現egrep
安裝在該機器上。一個快速的解決方案是使用
echo abc123def | egrep -o '[0-9]*'
由於您使用的是正則表達式,所以你必須使用:
祝你好運!
-E/egrep是* extended *正則表達式所必需的; '[0-9] *'是一個有效的基本正則表達式。 ('grep'中的're'代表正則表達式)。也許2.5.1中的錯誤並不存在於擴展的正則表達式支持中,但僅使用正則表達式的事實並不意味着您需要-E。 – chepner 2012-07-27 23:53:45
爲什麼你想要一個可以匹配零個字符的正則表達式呢?我希望它匹配每一行,而不僅僅是數字的行。 – 2009-11-15 03:58:14