Bashから追加の行を削除する最速の方法、または文字列が#の場合は最後の行

Bashから追加の行を削除する最速の方法、または文字列が#の場合は最後の行

bash次のような場合は、スクリプトの最後に生成されたファイルを整理するためのエレガントな方法を探しています。

  1. 削除する行の下の行の最初の文字は次のとおりです。# または
  2. #ファイルの最後の行の最初の文字です。

ファイルは次のとおりです(参照行番号はに[]ありますが、いいえファイル自体から):

[1] # foo
[2] bar1
[3] bar2
[4] bar3
[5] # foob
[6] #ar
[7] ar1
[8] ar2
[9] ar3
[10] #

上記の例では、5行と10行を削除したいと思います。で始まる#行の後に、で始まる行が続くことを望まないし、#ファイルの最後の行がで始まることも望ましくありません#

編集:期待される出力:

[1] # foo
[2] bar1
[3] bar2
[4] bar3
[5] #ar
[6] ar1
[7] ar2
[8] ar3

bash行って自分で教える素晴らしいsed構文と混同されますが、awkここへの答えになりそうです。

ベストアンサー1

考えるあなたが望むもの

sed -e '${/^#/d}' -e '$!N;/^#.*\n#/D' -e 'P;D' file
  • ${/^#/d}アドレスの最後の行が$一致した場合は^#削除します。

  • $!N...P;Dスクロールを維持する2行のバッファ

  • /^#.*\n#/D#パターンの先頭と改行の後にある場合は、改行を削除して新しいループを開始します。

おすすめ記事