sed、awk、または grep を使用した複数行パターンの一致

sed、awk、または grep を使用した複数行パターンの一致

sedを使用するか、awk複数行のパターンマッチングを実行できますかgrep?たとえば、{との間のすべての行を取得したいと思います。}

だから一致する必要があります。

 1. {}
 2. {.....}
 3. {.....
.....}

もともと、この質問は<p>例として使用されました。{とを使用するように質問を編集しました}

ベストアンサー1

私は小さいか完全に一時的なものより小さいものを扱うことができるパーサーを取得したいという上記の提案に同意しますが、sedを使用して中括弧間の複数行ブロックを一致させることができます(ほぼ;-)。

これはsedコードのデバッグバージョンです。

sed -n '/[{]/,/[}]/{
    p
    /[}]/a\
     end of block matching brace

    }' *.txt

いくつかのメモ、

  • -n は「基本印刷行なしで処理」を意味します。
  • 「p」は意味するこの行を印刷してください。
  • この構文は/[{]/,/[}]/範囲式です。これは、最初のパターンと一致するものが見つかるまでスキャンし、(/[{]/)2番目のパターンが見つかるまでスキャンし、(/[}]/)sedコードの{}の間にあるすべての操作を実行することを意味します。この場合は「p」とデバッグコードです。 (ここでは説明していませんが、使用、修正、削除する方法の中から最適な方法を選択してください。)

コードが{、}で区切られたブロックと一致すると判断した場合は、ブロックデバッグの/ [}] / a \の末尾を削除できます。

このコード例では、中かっこペア内にないすべての項目をスキップします。上記で他の人が指摘したように、文字列、正規表現などに追加{、}を含めると簡単に混乱する可能性があります。OR同じ行に閉じる中括弧、(Fred.bearに感謝)

これが役に立つことを願っています。

おすすめ記事