テキストファイルから検索文字列を含むすべての中括弧で区切られたテキストブロックを抽出するための、すばやく簡単なワンライナーを探しています。私はこれに夢中になっているところですが、誰もが検索文字列なしで中括弧の間のテキストを取得することについて投稿しているだけのようです。
次のような内容の大きなテキストファイルがあります。
blabla
blabla {
blabla
}
blabla
blabla {
blabla
blablaeventblabla
}
blabla
括弧で囲まれたエントリの大部分には、「イベント」である検索文字列が含まれていません。
私が抽出しようとしているのは、中括弧の各セット間のすべてのテキスト(特に複数行の一致を含む)ですが、そのテキストに検索文字列も含まれている場合に限ります。したがって、次のように出力します。
blabla {
blabla
blablaeventblabla
}
私のLinuxコマンドラインは/ usr / bin / bashです。私はさまざまなgrepおよびawkコマンドを試してきましたが、それを機能させることができません。
awk '/{/,/event/,/}/' filepath
grep -iE "/{.*event.*/}" filepath
これは一般的な作業なので、これは本当に簡単だと思っていました。ここで何が欠けていますか?
このgnu-awkは機能するはずです:
awk -v RS='[^\n]*{|}' 'RT ~ /{/{p=RT} /event/{ print p $0 RT }' file
blabla {
blabla
blablaeventblabla
}
RS='[^\n]*{\n|}'
入力レコード区切り文字を、{
ORが後に続く任意のテキストとして設定します}
。正規表現にRT
基づいて一致するテキストに設定される内部awk変数ですRS
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加