Bash

在 sed 中使用變數時,它會替換整行,而不僅僅是匹配的字元串

  • November 21, 2019

我是 bash 的新手,我一直在嘗試理解其他類似的文章,但我只是不確定他們是否做了我需要的事情。

當我不使用變數而只輸入我想要搜尋和替換的內容時,它可以正常工作。但是當我傳遞變數時,腳本也會刪除字元串“host1”。這部分前面有一個 for 循環,用於查找包含“host1”的文件。arg1、2 和 3 是 $ 1, $ 2, $3.

input="$f"   

while read -r line  
do  
sed "/"$arg2"/ s=192.168.10.*="$arg3"="  

done < "$f"

我只想替換包含字元串“host1”的行中的 ip

10.10.10.10 host1 

假設$arg2設置為host1$arg3設置為,10.10.10.10那麼您的兩個命令都將從輸出sed中刪除。host1

問題是因為您正在匹配192.168.10.*.*最後的 將匹配到行尾的任何內容並將其替換為10.10.10.10.

嘗試:

arg2=host1
arg3=10.10.10.10
sed "/${arg2}/ s/192\.168\.10\.[0-9]\+/${arg3}/" /path/to/file 

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