bash
次のような場合は、スクリプトの最後に生成されたファイルを整理するためのエレガントな方法を探しています。
- 削除する行の下の行の最初の文字は次のとおりです。
#
または #
ファイルの最後の行の最初の文字です。
ファイルは次のとおりです(参照行番号はに[]
ありますが、いいえファイル自体から):
[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
#
パターンの先頭と改行の後にある場合は、改行を削除して新しいループを開始します。