GNU/Linux >> Linux の 問題 >  >> Linux

Sed、Awk、またはGrepを使用したマルチラインパターンマッチ?

この質問にはすでに回答があります :複数の行にまたがるパターンを「grep」するにはどうすればよいですか?

(9つの回答)
2年前に閉鎖されました。

sedを使用して複数行のパターンマッチングを行うことは可能ですか? 、awk またはgrep ?たとえば、{の間のすべての行を取得したいとします。 および}

したがって、一致する必要があります

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

最初に使用された質問は<p> 例として。 {を使用するように質問を編集しました および}

承認された回答:

上記のアドバイスには同意しますが、小さなものや完全にアドホックなもの以外のパーサーを取得することをお勧めしますが、中括弧とsedの間の複数行のブロックを一致させることはほとんど不可能です。

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

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

    }' *.txt

いくつかのメモ、

  • -nは、「処理されたデフォルトの印刷行がない」ことを意味します。
  • 「p」はを意味します 行を印刷します。
  • 構成/[{]/,/[}]/ 範囲式です。これは、最初のパターン(/[{]/)に一致するものが見つかるまでスキャンすることを意味します 次に、2番目のパターン(/[}]/)が見つかるまでスキャンします。 次に、sedコードの{}の間にあるアクションを実行します。この場合、「p」とデバッグコード。 (ここでは説明していませんが、使用するか、変更するか、最適な方法で取り出してください)。

コードが{、}で区切られたブロックと実際に一致していることが十分に証明されたら、/[}]/ブロックデバッグの終わりを削除できます。

このコードサンプルは、中括弧のペアの内側にないものをスキップします。
上記の他の人が指摘したように、文字列やreg-expsなどに余分な{、}が埋め込まれていると、簡単に混乱します。<強い>または閉じ中括弧が同じ行である場合 、(fred.bearに感謝します)

これがお役に立てば幸いです。


Linux
  1. Sedを使用してパターン範囲間の行を検索および置換

  2. Sedを使用してパターンマッチ後に前の行を印刷しますか?

  3. 各行でN番目の一致が見つかった後のパターンの置き換え??

  1. Sed:パターンマッチの最初の出現のみを印刷しますか?

  2. Grepのみを使用して最初のオカレンスのみを検索しますか?

  3. grep を使用して逆方向に検索する

  1. ファイル内の複数行パターンを検索するにはどうすればよいですか?

  2. SED を使用した単語の最初の文字の大文字化

  3. grep と sed を使用して文字列を検索して置換する