簡體   English   中英

在sed和perl中替換單引號

[英]substitute single quotes in sed and perl

有人可以解釋一下這兩個命令發生了什么嗎? 為什么sedperl使用相同的正則表達式模式給出不同的結果:

# 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@

在這里GNU sed手冊中記錄

編輯:perl中的等價物是\\Z (或者可能是\\z取決於您希望如何處理尾隨換行符)。 因為\\'不是perl正則表達式中的特殊序列,所以它只是匹配文字引號。 正如在其他答案和注釋中所提到的,在雙引號字符串中轉義單引號是沒有必要的,正如您所發現的那樣,可能會導致意外行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM