Bash
有沒有辦法使用 shell 變數替換來替換最後一次匹配?
% x=abracadabra % echo ${x//a/o} obrocodobro
哼……
有沒有辦法使用 shell 替換(IOW,不推出, ,等)替換最後一次出現的模式?
sed``awk``perl
注意:這替換了尾隨事件 - 與“最後一次出現”不太一樣
來自Bash 參考手冊 Section 3.5.3 Shell Parameter Expansion:
${parameter/pattern/string}
該模式被擴展以產生一個模式,就像在文件名擴展中一樣。參數被擴展,模式與其值的最長匹配被替換為字元串。如果 pattern 以 ‘/’ 開頭,則所有匹配的 pattern 都被替換為字元串。通常只替換第一場比賽。如果 pattern 以 ‘#’ 開頭,它必須匹配參數擴展值的開頭。**如果 pattern 以 ‘%’ 開頭,它必須匹配參數擴展值的末尾。**如果 string 為 null,則刪除 pattern 的匹配項,並且可以省略 / 後面的 pattern。如果啟用了 nocasematch shell 選項(參見 Shopt Builtin 中 shopt 的描述),則執行匹配時不考慮字母字元的大小寫。如果參數是 ‘@’ 或 ‘’,依次對每個位置參數應用替換操作,展開就是結果列表。如果 parameter 是下標為 ‘@’ 或 ’ ’ 的數組變數,則對數組的每個成員依次進行替換操作,展開是結果列表。
所以
$ x=abracadabra $ echo "${x/%a/o}" abracadabro