Bash
在 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
。請注意,我不知道這是否實際上是由反引號引起的,或者可能是變數名插值問題。無論如何,我該如何解決這個問題?
為了將轉義減少到最低限度,我建議使用單引號
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'