我試圖替換具有尾部減號的值並將其替換爲前導減號。我有這個正則表達式在SED中不起作用,儘管我不明白爲什麼。替換尾部減號與前導減號
echo '8.8-' | sed 's/(\d+(?:\.\d+)?)-/-\\1/'
SED返回8.8-
我試圖在記事本++正則表達式幫助插件,它相匹配的8.8-並識別子匹配\ 1 8.8
我試圖替換具有尾部減號的值並將其替換爲前導減號。我有這個正則表達式在SED中不起作用,儘管我不明白爲什麼。替換尾部減號與前導減號
echo '8.8-' | sed 's/(\d+(?:\.\d+)?)-/-\\1/'
SED返回8.8-
我試圖在記事本++正則表達式幫助插件,它相匹配的8.8-並識別子匹配\ 1 8.8
的\d
是Perlism。 Sed指的是較舊的,Perl之前的POSIX標準。你可能想要的是
echo '8.8-' | sed -r 's/([[:digit:]]+(\.[[:digit:]]+)?)-/-\1/'
的[[:digit:]]
是POSIX的方式來寫Perl的\d
。
當然,你可以只寫[0-9]
,而不像別人指出的那樣。
順便提一句,你需要-r
來使你的括號能夠隨你的喜好工作。
\d
不匹配一個數字字符的表達在sed,[0-9]
將盡管。
順便說一句,請包括你真的想要做什麼 - 你使用數字? Ints和小數?我可以從您的RegEx中推導出儘可能多的數據,但如果問題得到妥善解答,則不需要這麼做。
編輯
如果您使用GNU Linux上,最好使用字符類比傳統的範圍,因爲他們是更便攜:
echo '8.8-' | sed -r 's/([[:digit:]]+(\.[[:digit:]]+)?)-/-\1/'
echo '8- 8.1- 81.2- 8.28- 82.28-' | sed -r 's/([0-9]+(.[0-9]+)?)-/-\1/g'
結果於
-8 -8.1 -81.2 -8.28 -82.28
桑達根本不明白\ d或\ d:
echo "456" | sed -r 's/\d/+/g'
456
感謝您的詳細解釋。 – Todd 2012-04-25 00:57:31