Sed

使用 sed 添加後綴:為什麼在第二次使用時會忽略變數?

  • October 8, 2022

我想到了以下幾點:

xx=abc ; echo "abcde-123" | sed -e s/$xx/$xx_nnn/g

會導致 abcde_nnn123. 然而結果是

去123

可以看出,前綴xx=abc被刪除,_nnn替換模式中的 完全被忽略。為什麼會這樣?

主要問題在這裡:/$xx_nnn/ 您實際上傳遞了一個$xx_nnn實際上不存在的名為的變數。所以基本上你正在執行:

xx=abc ; echo "abcde-123" | sed -e s/$xx//g
#or what is equivalent:
echo "abcde-123" | sed -e s/abc//g

出於這個原因,你得到:de-123,你什麼都abc沒有。

最好的解決方案是使用:${varname},例如:

xx=abc ; echo "abcde-123" | sed -e "s/$xx/${xx}_nnn/g"

所有後面的}都不會是變數名的一部分。

關於:

將導致 abcde_nnn123

那不會是結果。使用sed您提供的命令,您將獲得以下資訊:

abc_nnnde-123

所以如果你真的想得到:abcde_nnn123那麼你的程式碼應該是這樣的:

xx=abcde ; echo "abcde123" | sed -e "s/$xx/${xx}_nnn/g"

您還可以使用bash 參數擴展替換字元串。例如:

str='abcde123'
xx='abcde'
echo "${str/$xx/${xx}_nnn}" # means: in 'abcde123' replace 'abcde' 
#with `abcde_nnn`

引用自:https://unix.stackexchange.com/questions/720221