在 sed 呼叫中轉義多個反引號

在 sed 呼叫中轉義多個反引號

我需要在幾個 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'

相關內容