aaa aaaa aaaa aaaa
sss ssss ssss ssss
ddd dddd dddd dddd
fff ffff ffff ffff
abc pattern asd fde
111 222 333 444 555
666 777 888 999 000
所望の出力を含むパターンの前にすべてのものを削除します。パターン使用のawkやsedの
111 222 333 444 555
666 777 888 999 000
aaa aaaa aaaa aaaa
sss ssss ssss ssss
ddd dddd dddd dddd
fff ffff ffff ffff
abc pattern asd fde
111 222 333 444 555
666 777 888 999 000
所望の出力を含むパターンの前にすべてのものを削除します。パターン使用のawkやsedの
111 222 333 444 555
666 777 888 999 000
ちょうどパターンが発見されるたびにフラグを設定した場合。その瞬間から、印刷ライン、上:
$ awk 'p; /pattern/ {p=1}' file
111 222 333 444 555
666 777 888 999 000
、あるいはまた
awk '/pattern/ {p=1;next}p' file
これは、各行にpattern
を探します。変数が見つかると、変数p
は1に設定されます。トリッキーな点は、p>0
のときに行が印刷されるだけなので、次の行が出力されることです。
How to select lines between two patterns?の場合は、そのような第2パターンがない場合です。
もう1つのsed
解決策:
sed ':loop;/pattern/{d};N;b loop' file.txt
これは、パターンが見つからないときにすべてを削除しない唯一の解決策であるようです。 –
を考えると、あなたがファイルから削除したいのかという点ではなく、ファイルから選択するために、何をしたいの面で問題を特定しないようにしてください - それは頻繁になりますあなたとあなたの問題に出くわすソリューションの可読性、保守性などの違い。 –