以前はこのフォーラムを利用して、ちょうど参加しました!同様の質問を見ましたが、これまで何も機能しませんでした(主にsedを使用しています)。ファイル内のアスタリスク(*)のすべてのインスタンスを見つけて、空白行に達するまでアスタリスクとその後のすべてのエントリを削除したいと思います。たとえば、
*252
253
254
255
(blank line here)
または
*261
265
(blank line here)
各データブロックの長さは異なる。その後、出力を新しいファイルに移動したいと思います。どんなアイデアがありますか?
答え1
*
次の空行を含む行から削除するには、次のようにします。
sed '/[*]/,/^$/d' filename
メモ:
は
*
正規表現のアクティブ文字であり、リテラルのみを一致させようとするので、*
エスケープする必要があります。これは上記のように*
行うことができます。\*
[*]
^
空白行を一致させるには、開始(マーク)と終了(マーク)の間に文字のない行が必要です$
。したがって、^$
空行に一致します。/[*]/,/^$/
*
範囲です。空行を含む行で始まり、空行で終わる行セットと一致します。d
範囲内のすべての行を削除するようにsedに指示します。
上記のコードは標準出力に出力されます。現在の場所でファイルを変更するには:
sed -i.bak '/[*]/,/^$/d' filename
はい
次のサンプルファイルを考えてみましょう。
$ cat filename
*252
253
254
255
OR
*261
265
end
これで以下が生成されます。
$ sed '/[*]/,/^$/d' filename
OR
end