次の内容を含む857835行ファイルがあるとします。
a1
rubbish1
rubbish2
rubbish3
rubbish4
a1
rubbish5
rubbish6
rubbish7
rubbish8
a1
すべての項目と次の行(rubbish1
この場合)を削除したいと思いますrubbish5
。どうすればいいですか?
試してみましたが、grep 'a1' -v -A1
成功しませんでした。
私のGoogle-fuは今回は役に立ちませんでした。誰かお願いします!
答え1
努力する:
sed -e '/^a1$/,+1d' "filename"
/^a1$/ から次の行まで削除するという意味です。
^ と $ は行全体と一致することが保証されるため、隠された a1 は一致しません。
答え2
以下はGNU以外の場合に適用されますsed
(,+1
アドレス構文はGNU拡張です)。
sed -e '/^a1$/,/^/d' my_file >my_filtered_file
「'a1'が正確に読み取られた行から始まり、その行の先頭に存在する次の行(つまり、次の行)で終わります。」
しかし、異なる数の行を削除するにはまったく異なるスクリプトが必要なため、@asoundmoveの答えよりもスケーラビリティがはるかに低くなります。