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.*?BBB
will match)。AAA foo1 BBB
AAA foo1 BBB AAA bar BBB
この-z
パラメータは改行ではなくNUL文字で行を区切るため、正規表現は複数行を処理できます。
入力例:
keep1 AAA remove1
remove2
remove3 BBB keep3
出力例:
keep1 BBB keep3