Sed コマンドと行の削除

Sed コマンドと行の削除

BashスクリプトからAAA(含む)からBBB(除外)まで、すべての項目を削除してみました。したがって、AAAからBBB、BBBまですべてのアイテムをエクスポートし続けます。以下の行を思い出しましたが、誤ってBBBも削除されます。助けてくれてありがとう。

sed -i '/AAA/,/BBB/d' file.txt

ベストアンサー1

AAAと行BBBの先頭にある場合

sed を使用して終了パターンを除く行範囲を削除するあなたの質問に対する答えがあります:

sed -i '/AAA/,/BBB/{/BBB/!d}' file.txt

入力例:

AAA remove1
remove2
BBB keep3

出力例:

BBB keep3

行の中間のどこかに表示される場合

正規表現を使用できます。

sed -izE 's/(.*?)AAA.*?(BBB.*)/\1\2/g' file.txt

\1括弧は正規表現の一部をグループ化するため、後で\2(最初のキャプチャグループ)と(2番目のキャプチャグループ)を介してその内容を参照できます。.*すべての文字(.)を0回以上(*)一致します。以下の疑問符は、*可能な限り短い文字列と一致するように「怠惰な」状態にします(代わりにAAA foo1 BBB AAA bar2 BBB AAA.*?BBBwill match)。AAA foo1 BBBAAA foo1 BBB AAA bar BBB

この-zパラメータは改行ではなくNUL文字で行を区切るため、正規表現は複数行を処理できます。

入力例:

keep1 AAA remove1
remove2
remove3 BBB keep3

出力例:

keep1 BBB keep3

おすすめ記事