[英]substitute single quotes in sed and perl
有人可以解釋一下這兩個命令發生了什么嗎? 為什么sed
和perl
使用相同的正則表達式模式給出不同的結果:
# echo "'" | sed -e "s/\'/\'/"
''
# echo "'" | perl -pe "s/\'/\'/"
'
# sed --version
sed (GNU sed) 4.5
你正在使用GNU sed,對嗎? \\'
是一個擴展,在GNU的基本正則表達式實現中充當字符串結尾的錨點。 因此,您在輸出中看到兩個引號,因為s
匹配行的末尾並在行中已有的引號之后添加引號。
為了使它更明顯:
echo foo | sed -e "s/\'/@/"
產生
foo@
編輯:perl中的等價物是\\Z
(或者可能是\\z
取決於您希望如何處理尾隨換行符)。 因為\\'
不是perl正則表達式中的特殊序列,所以它只是匹配文字引號。 正如在其他答案和注釋中所提到的,在雙引號字符串中轉義單引號是沒有必要的,正如您所發現的那樣,可能會導致意外行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.