我有一個要求,我必須用x值替換第一次出現的關鍵詞{以及整個行},用Y值替換第二次出現的關鍵詞。例如
sudo docker push IP:PORT/ABC:1
sudo docker push IP:PORT/XYZ:1
在上述情況下,我將使用關鍵字 "sudo docker push "進行選擇,并將第1次出現的整行改為sudo docker push IP1:PORT/ABC:1,第2次出現的整行改為sudo docker push IP2:PORT/ABC:1。
我已經嘗試了以下的組合,但直到現在都沒有成功:
我嘗試了以下的組合,但直到現在都沒有成功。
sed -i "s,old-word,new-word," file-name
sed -i "<occurence-number> s,old-word,new-word,g" file-name
sed -i " s,old-word,new-word,<occurence-number>g" file-name
sed "<occurence-number>,old-word,{s,old-word,new-word,}" file-name
uj5u.com熱心網友回復:
如果你允許我重新表述一下你的問題:
名為file-name的檔案含有v.gr.
一些線條
...
sudo docker push IP:PORT/ABC:1
更多行數
...
sudo docker push IP:PORT/ABC:1
以此類推
...
必須改成:
一些線條
...
sudo docker push IP1:PORT/ABC:1
更多行數
...
sudo docker push IP2:PORT/ABC:1
以此類推
...
困難在于,同一個鍵的兩次出現必須觸發兩個不同的變化。
試試這個腳本:
#!/bin/bash
key="sudo docker push"/span>
注意事項。"/"下面必須轉義為"/"。
change1="sudo docker push IP1:PORT/ABC:1"
change2="sudo docker push IP2:PORT/ABC:1"
sed -i "
0,/$key/s/^.*$key.*$/FIRST-OCCURENCE/
0,/$key/s/^.*$key.*$/$change2/
/FIRST-OCCURENCE/s//$change1/
"檔案名
uj5u.com熱心網友回復:
例子不清楚......最好提供完整的字串例子,說明你有什么,你想要什么結果。 但也許你正在尋找 "sudo docker push "并試圖只替換這一部分,而不是整行。 你可以使用regexp來選擇其余的行,就像這樣:
sed -i 's/sudo docker push.*/sudo docker push IP:PORT/XYZ:1/'
或者只是提供更清楚的起源和結果字串的例子。
uj5u.com熱心網友回復:
用sed是可以的,但非常不方便:
sed '/OLD/{s|.*|NEW-1|; :label; n; /OLD/s|.*|NEW-2|; b label;}'/span>
取決于您的sed版本,您可能需要將:label和b label后面的;替換為字面的換行符,以使其發揮作用。
對于輸入...
a b c
d OLD e
f g h
i OLD k
l m n
......這個列印......
a b c
新-1
f g h
新-2
l m n
為了簡單起見,你可能想用awk代替:
awk '/OLD/ { c; if (c==1) {$0="NEW-1"} else {$0="NEW-2"}. 1'
或者
awk 'BEGIN {a[1]="NEW-1"; a[2]="NEW-2"}。/OLD/ {$0=a[ c]} 1'
uj5u.com熱心網友回復:
試試這個
sed -i "/old-word/c new-word"/span> file-name
uj5u.com熱心網友回復:
awk可以用來替換第4列。
awk '{x =1; $4="IP "x":PORT/ABC:1"}1'/span> $file
這將使每一行的x遞增
輸出
sudo docker push IP1:PORT/ABC:1
sudo docker push IP2:PORT/ABC:1
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/324966.html
標籤:
上一篇:從檔案中過濾黑名單的域名
