我試圖在bash做以下命令:Sed則有錯誤,如果周圍的正則表達式沒有單引號
ls -1 | sed s/\(.*\)/"\1"/
這是周圍添加的ls
每個輸出雙引號,但結果顯示 sed: 1: "s/(.*)/\1/": \1 not defined in the RE
我在正則表達式中添加單引號後,我得到了正確的結果。正確的是:
ls -1 | sed 's/\(.*\)/"\1"/'
theocratically我不需要右外引號?任何人都有相同的經歷?
我試圖在bash做以下命令:Sed則有錯誤,如果周圍的正則表達式沒有單引號
ls -1 | sed s/\(.*\)/"\1"/
這是周圍添加的ls
每個輸出雙引號,但結果顯示 sed: 1: "s/(.*)/\1/": \1 not defined in the RE
我在正則表達式中添加單引號後,我得到了正確的結果。正確的是:
ls -1 | sed 's/\(.*\)/"\1"/'
theocratically我不需要右外引號?任何人都有相同的經歷?
單引號用於禁用各種序列的shell解析,包括反斜槓轉義。如果你不使用它們,你的序列如\(
被傳遞給sed,如(
。您可以通過將echo
添加到您的命令開頭來檢查。
發送命令echo
會告訴你的sed看到
$ echo sed s/\(.*\)/"\1"/
sed
嗯,sed腳本完全消失。暴露的「*」迫使shell嘗試匹配文件。讓我們禁用:
$ set -f
$ echo sed s/\(.*\)/"\1"/
sed s/(.*)/\1/
殼吃了引號和反斜線。引用sed腳本:
$ echo sed 's/\(.*\)/"\1"/'
sed s/\(.*\)/"\1"/
這給出了正確的結果,sed會看到你想給它的腳本。我們怎樣才能做到這一點沒有報價
$ echo sed s/\\\(.\*\\\)/\"\\1\"/
sed s/\(.*\)/"\1"/
而這是醜陋的。
報價是不是有sed,是否有殼。 –
@franky:或者'sed's /.*/"&"/'' – Cyrus
@Cyrus這裏的意思是什麼? – franky