Bash
在 sed 中使用變數時,它會替換整行,而不僅僅是匹配的字元串
我是 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