2017-06-27 72 views
1

請感謝您對此使用Linux「sed」的任何幫助。 我在下面的文件中有代碼塊。想要提取一個以「aa.bb.cc.config =」開頭並以「}」結尾的塊。從提取的塊中找到字符串[「bb11:11211」] [「ff5rt:11211」],並從文件中刪除匹配的行。在使用sed的匹配代碼塊中查找替換多個字符串

asdf={ 
ddd, \ 
fff, \ 
ggg \ 
} 
ghjk 
wwww 
aa.bb.cc.config={"List": [ \ 
"aa11:222", \ 
"bb11:11211", \ 
"cc22ss:11211", \ 
"dd33ss:11211", \ 
"ff5rt:11211", \ 
"gg6hj:11211", \ 
], "dd": true, "ff": 0, "hh": 0, "jj": 10, "kk": 0 } 

vsdfsdf 
ewqewqe 

OUTPUT:

asdf={ 
ddd, \ 
fff, \ 
ggg \ 
} 
ghjk 
wwww 
aa.bb.cc.config={"List": [ \ 
"aa11:222", \ 
"cc22ss:11211", \ 
"dd33ss:11211", \ 
"gg6hj:11211", \ 
], "dd": true, "ff": 0, "hh": 0, "jj": 10, "kk": 0 } 

vsdfsdf 
ewqewqe 

先謝謝了!

+0

你知道sed的,爲什麼不給它一個嘗試自己解決吧?如果您遇到問題,請添加您試圖提問的代碼 – Sundeep

回答

0

sed的方法:

sed '/^aa\.bb\.cc\.config=/,/}$/{ /\"\(bb11\|ff5rt\):11211\"/d; }' file 
  • /^aa.bb.cc.config=/,/}$/ - 地址範圍,考慮從/^aa.bb.cc.config=//}$/

  • /\"\(bb11\|ff5rt\):11211\"/d; - 刪除線匹配捕獲的圖案空間內的圖案


同樣使用擴展的正則表達式-E

sed -E '/^aa\.bb\.cc\.config=/,/\}$/{ /"(bb11|ff5rt):11211"/d; }' file 

輸出:

asdf={ 
ddd, \ 
fff, \ 
ggg \ 
} 
ghjk 
wwww 
aa.bb.cc.config={"List": [ \ 
"aa11:222", \ 
"cc22ss:11211", \ 
"dd33ss:11211", \ 
"gg6hj:11211", \ 
], "dd": true, "ff": 0, "hh": 0, "jj": 10, "kk": 0 } 

vsdfsdf 
ewqewqe 
+0

實際上感謝它在基於GNU的工作。我需要這個基於BSD的操作系統。 – raffiqu

+0

嘗試'sed -E'以允許與垂直條交替。 – stevesliva

+0

@raffiqu,使用我的第二種方法 – RomanPerekhrest