簡體   English   中英

sed 替換命令有效但 output 無效

[英]sed replace command working but output is invalid

└─$ sed --version
sed(GNU sed)4.7

文件“主機”:

ip1 == 10.0.0.1
ip2 == 10.0.0.100

執行的命令:

sudo -i sed -i 's/10.0.0.1/10.0.0.200/g' hosts

Output 文件:

ip1 == 10.0.0.200
ip2 == 10.0.0.20000

ip2 中的更改不是預期的並且無效。 這只是 RPA 中的雲自動化需要此邏輯的示例邏輯。 ip 的輸入是動態變量。

你需要逃避. 並添加條件以避免部分匹配:

$ sed 's/== 10\.0\.0\.1$/== 10.0.0.200/' ip.txt
ip1 == 10.0.0.200
ip2 == 10.0.0.100

$是行尾錨,如果行尾可以有空格,請使用\s*$

如果==之后的空格可以變化,則使用==\s*而不是==

我假設根據給定的樣本,每行只能有一個匹配項,因此不使用g標志


如果ip1ip2等實際上不是輸入的一部分,請使用:

$ cat ip.txt 
10.0.0.1
10.0.0.100

$ sed 's/^10\.0\.0\.1$/10.0.0.200/' ip.txt
10.0.0.200
10.0.0.100
sudo -i sed -i 's/\b10\.0\.0\.1\b/10.0.0.200/g' hosts
  1. 逃離。 (. ->. ) 因為表示正則表達式中的每個字符

  2. \b 將搜索限制在這個確切的位置

你必須改變你的命令如下:

sed -i -e 's:10\.0\.0\.1$:10\.0\.0\.200:g' hosts

這都幫助我解決了它。 IE

$ sudo -i sed -i 's/10.0.0.1\b/10.0.0.200/g' hosts

或者

$ sudo -i sed -i 's/<\10.0.0.1\>/10.0.0.200/g' hosts

歡迎更多回復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM