テキストファイルから視覚的に空白行を削除する方法は?

テキストファイルから視覚的に空白行を削除する方法は?

私はいくつかのテキストファイルを持っていますが、その中には空行、つまり改行文字のみが含まれているか、スペースの後に改行文字が続く可能性があります。コマンドを使用してこれらのファイルを見つけますfind

  • サンプルファイル
    #Title 1
    12345678 1234
    
    #Title 2
    12345678 1234
    12345678 1234
    
    
    
    
    
    
    
    
  • 期待される出力
    #Title 1
    12345678 1234
    #Title 2
    12345678 1234
    12345678 1234
    

これらの空白行をすべて削除したいと思います。次のコマンドを使用してDebian Linux Stretchで試しました。

cat "/path/to/file" | sed '/^\s*$/d' | sponge "/path/to/file";

たとえば、一部のファイルには4つ以上の空白行がありますが、上記のコマンドは後ろの空白行の1つを除いてすべて削除します。

最後の空行をどのように削除しますか?上記のように、ファイルに空白行がまだある場合は、この行も削除する必要があります。

ファイルはBASH変数の順序付き配列に格納されるため、ファイル間の一貫性を取得しようとしています。その後、ファイルを繰り返し、すべての空行と末尾の空行を削除します。一方、一部のファイルにはすでに空白行または末尾の空白行がありません。

ベストアンサー1

あなたの質問を正しく理解したら、テキストファイルから(実際または視覚的に)空白行を削除したいと思います。これはEasyを使用して行うことができますawk

単一ファイルの場合は呼び出すことができます。

awk 'NF' /path/to/file

これにより、その行に「空白ではない」文字が1つ以上含まれているファイルのみが印刷されます。これに対するアイデアは、入力行がawk基本的に「空白」から「フィールド」、つまり連続した空白とタブに分割されることです。ただし、行に対応する文字のみが含まれている場合、自動変数に内部的に格納されているフィールドの数はNF「0」として認識されます。上記の(やや短い)プログラムは、NF現在の行を印刷するためにゼロでなければならないという条件を課します。これにより、実際または「視覚的に」空白行が効果的に削除されます。

インライン編集はデフォルトでは行われないため、awk出力を一時ファイルにリダイレクトしてから名前を変更したり、拡張を理解したりするのに十分な新しい実装を使用する必要があります-i inplace

awk -i inplace 'NF' /path/to/file

おすすめ記事