2013-05-09 66 views
5

我的命令是這樣的:爲什麼這個sed命令匹配號碼不起作用?

echo "12 cats" | sed 's/[0-9]+/Number/g' 

(我使用的是sed香草蘋果機)

我希望得到的結果是:

Number cats 

然而,真正的結果是:

12 cats 

有沒有人有這方面的想法?謝謝!

+0

對於linux,你可以使用'-r'選項來sed,對於Mac,你可以使用'-E' ...這也適用於Linux的一些變種作爲兼容性shim – Petesh 2013-05-09 14:27:07

回答

7

擴大+修改工作對我來說:

echo "12 cats" | sed 's/[0-9][0-9]*/Number/g' 

此外,-E開關將使+修改工作,看到choroba的答案。

+0

似乎BSD sed默認不支持'+ .. – 2013-05-09 14:30:18

16

+必須反斜槓以獲得其特殊含義。

echo "12 cats" | sed 's/[0-9]\+/Number/g' 
+1

這對我來說也不適用(香草Mac sed)。 – zoul 2013-05-09 14:20:58

+0

@zoul:請參閱http://stackoverflow.com/q/4453760/1030675 – choroba 2013-05-09 14:25:27

+2

啊哈,謝謝! (Mac sed過於保守,無法識別'+'修飾符,'-E'開關打開擴展的正則表達式,其中'+'未轉義。) – zoul 2013-05-09 14:29:45

1

使用Perl,這將工作在UNIX或Linux。

echo "12 cats" | perl -pe 's/\d+/Number/g' 
0

在未(在資源至少我迄今..)解釋一個非常神祕的方式, 您應該檢查了下方面:

通配符(在bash的上下文中) , 正則表達式, 擴展的正則表達式

對於你的問題似乎是你給的sed的EXPR」是一個正則表達式或擴展正則表達式....所以由教程中,我讀你應該在你的實際還插入了-r命令在sed ...

回聲「12只貓」| sed -r's/[0-9] +/Number/g'

適用於Ubuntu 16.04,bash。

+0

我沒有看到它是4年前....可能我的回答不再是關鍵任何更多哈哈......但它強調我的第一行的答案。 – YigalO 2017-07-08 09:37:17