![在 sed 呼叫中轉義多個反引號](https://rvso.com/image/36421/%E5%9C%A8%20sed%20%E5%91%BC%E5%8F%AB%E4%B8%AD%E8%BD%89%E7%BE%A9%E5%A4%9A%E5%80%8B%E5%8F%8D%E5%BC%95%E8%99%9F.png)
我需要在幾個 SQL 語句中迭代執行搜尋和替換:
從:
CREATE TABLE `Old_Name` (
到:
ALTER TABLE `Old_Name` RENAME TO `New_Name`
上面的查詢包含反引號`
。我嘗試執行以下操作
sed -i -r "s/CREATE TABLE \`$search\` \(/ALTER TABLE \`$search\` RENAME TO \`$replacement\`/g" /query.txt;
它會在命令列上建立一個輸入。但如果我在後面加一個空格$replacement
,它就可以正常運作。但我不要後面的空格New_Name
。
請注意,我不知道這實際上是由反引號引起的還是可能是變數名插值問題。不管怎樣,我該如何解決這個問題?
答案1
為了將轉義減少到最低限度,我建議使用單引號sed
,例如
sed 's/pattern/repl/g'
(在單引號中,您可以自由使用反引號,無需擔心且無需轉義)。
如果需要在sed
腳本中使用 shell 變量,請將單引號和雙引號放在一起,如下例所示
var="bbb"
thing=foo
sed 's/aaa'"${var}"'ccc/some'"${thing}"'else/g'
可以更好地將其視為以下串聯
's/aaa' + "${var}" + 'ccc/some' + "${thing}" + 'else/g'