2017-06-27 14 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 - /}$/

  • /\"\(bb11\|ff5rt\):11211\"/d;/^aa.bb.cc.config=/から行を考慮すると、アドレス範囲 -

    sed '/^aa\.bb\.cc\.config=/,/}$/{ /\"\(bb11\|ff5rt\):11211\"/d; }' file 
    
    • /^aa.bb.cc.config=/,/}$/の行を削除捕捉パターンスペース内のパターンにマッチ


    同じ使用して、拡張正規表現-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ベースのOSでこれが必要です。 – raffiqu

    +0

    'sed -E'を試して、垂直バーと交互に入れてください。 – stevesliva

    +0

    @raffiqu、私の2番目のアプローチを使用 – RomanPerekhrest

    関連する問題