2つのパターン間の線を選択的に削除

2つのパターン間の線を選択的に削除

次の内容を含むファイルがあります。

Hello world Unix!!
Its bright world
Current time is HH:mm:ss
Next action plan is item #3
End of task.
Thank you.


Hello world Linux!!
All actions completed.
End of Activity.
Thanks.

「アクティビティ」や「アクション」などの特定のキーワードセットを含む行が表示されるまで、「世界」というキーワードを含むすべての行とすべての後続の行を選択的に削除したいと思います。

希望の出力:

End of task.
Thank you.
End of Activity.
Thanks. 

ベストアンサー1

努力する:

$ awk  -v f=1 '/world/{f=0} /Activity|task/{f=1} f' File
End of task.
Thank you.


End of Activity.
Thanks.

仕組み:

  1. -v f=1

    awk変数をf作成して1

  2. /world/{f=0}

    現在行にが含まれている場合、world変数はf0に設定されます。

  3. /Activity|task/{f=1}

    行にActivityまたはが含まれている場合にtask設定されます。f1

    world上記Activityおよび/またはtaskここが正規表現で処理されることに注意してください。また、大文字と小文字を区別します。

  4. f

    f0以外の場合は、その行を印刷します。

空白行も削除してください

$ awk  -v f=1 '/world/{f=0} /Activity|task/{f=1} f && /./' File
End of task.
Thank you.
End of Activity.
Thanks.

f && /./f0以外の場合にのみ行を印刷するようにawkに指示します。そして行には、すべての種類の文字が1つ以上含まれています。

おすすめ記事