重複の可能性:
awk script- 括弧内のテキストを抽出
UNIX でファイルの 2 つの括弧の間のテキストを抽出しようとしています。いいね フォロー中
abc(
xyz,
abc,
mnr,
puc,
)
私は awk を次のように使用してみました:
awk 'BEGIN {FS="abc"} {print $2}' file.txt
しかし、これは機能していません。
この点で私を助けてください
前もって感謝します
重複の可能性:
awk script- 括弧内のテキストを抽出
UNIX でファイルの 2 つの括弧の間のテキストを抽出しようとしています。いいね フォロー中
abc(
xyz,
abc,
mnr,
puc,
)
私は awk を次のように使用してみました:
awk 'BEGIN {FS="abc"} {print $2}' file.txt
しかし、これは機能していません。
この点で私を助けてください
前もって感謝します
sed
次のように「テキストを抽出」するために使用できます。
sed -n '/abc(/,/)/ { //d; /^\s*$/!p }' file
結果:
xyz,
abc,
mnr,
puc,
説明:
-n
スイッチでデフォルトの印刷を無効にする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,
方法 1:
abc(
の前後に常に空の行がある場合)
:
awk -vRS="" '/abc\($/{f=1;next};/\)/{f=0}f' file
方法 2:
空行がわからない場合:
awk '/abc\($/{f=1;next;} /^ *\) *$/{f=0}f' file
方法 2 では、一部のケースが機能しないことに注意してください。たとえば、)
abc(...) ブロックにネストされた " " 行があります。しかし、あなたはそれをテストすることができました。あなたの質問に与えられた入力に基づいています。どちらも機能します。