-1

重複の可能性:
awk script- 括弧内のテキストを抽出

UNIX でファイルの 2 つの括弧の間のテキストを抽出しようとしています。いいね フォロー中

abc(

xyz,
abc,
mnr,
puc,

)

私は awk を次のように使用してみました:

awk 'BEGIN {FS="abc"} {print $2}' file.txt

しかし、これは機能していません。

この点で私を助けてください

前もって感謝します

4

2 に答える 2

3

sed次のように「テキストを抽出」するために使用できます。

sed -n '/abc(/,/)/ { //d; /^\s*$/!p }' file

結果:

xyz,
abc,
mnr,
puc,

説明:

  • -nスイッチでデフォルトの印刷を無効にする
  • 範囲演算子を使用して、2つのパターンからパターンを「選択」しますabc()
  • //d選択したパターンを削除します:abc(および)
  • そして、/^\s*$/!p空の行以外のものを印刷するようにsedに指示します。

またはとawk

awk '/abc\(/ { r=""; f=1 } f && !/^(abc\(|\)|\s*)$/ { r = (r ? r ORS : "") $0 } /\)/ { if (f) print r; f=0 }' file

結果:

xyz,
abc,
mnr,
puc,
于 2012-12-26T08:30:56.030 に答える
1

方法 1:

abc(の前後に常に空の行がある場合):

awk -vRS="" '/abc\($/{f=1;next};/\)/{f=0}f' file

方法 2:

空行がわからない場合:

awk '/abc\($/{f=1;next;} /^ *\) *$/{f=0}f' file

方法 2 では、一部のケースが機能しないことに注意してください。たとえば、)abc(...) ブロックにネストされた " " 行があります。しかし、あなたはそれをテストすることができました。あなたの質問に与えられた入力に基づいています。どちらも機能します。

于 2012-12-26T12:09:38.737 に答える