Linuxでファイルから空白行を削除する方法

Linuxでファイルから空白行を削除する方法

私のファイルには、次のスペースを含む出力があります。

daily/A3D05180000052121001 30698

daily/A3D05180000052200001 30698

daily/A3D05180000052203001 30698

空行を削除する必要があります。出力は次のようになります。

daily/A3D05180000052121001 30698
daily/A3D05180000052200001 30698
daily/A3D05180000052203001 30698

使ってみようsed

sed -i -e '/./,$!d' -e :a -e '/^\n*$/{$d;N;ba' -e '}' "$FILESIZE3"

しかし、うまくいきませんでした。誰でもこの問題を解決するのに役立ちますか?

答え1

sed '/^[[:space:]]*$/d' file >file.modified

fileこれにより、完全に空白または空白のような文字のみを含む行が削除されます。この場合、スペースに似た文字には、DOSテキストファイル(Unixツールで処理するとき)の各行の末尾にあるキャリッジリターン、タブ、およびスペースが含まれます。結果データが記録されますfile.modified

リダイレクトを削除して-i代わりにオプションを使用すると、新しいファイルを作成する代わりに「内部」変更が行われますが、fileこのオプションは移植できず、他のUnixシステムで異なる動作をすることができます(sed -i(所定の位置で編集)を使用して移植性を達成するには?)。

答え2

他の人は何をしているのかわかりませんがsed、それがあなたが探しているものではありませんか?

host:~ # sed -e '/^$/d' file.txt
daily/A3D05180000052121001 30698
daily/A3D05180000052200001 30698
daily/A3D05180000052203001 30698

それでも問題が解決しない場合は、要件を明確にしてください。

答え3

AWKはこう言いました。

awk '!/^$/{ print }' infile > outfile && mv outfile infile 

答え4

vimは空の行を削除するためにグローバルコマンドを使用します。あなたの場合に役立つかどうかはわかりません。

#:[range]g/pattern/cmd

この例は、パターンに一致する各行でcmdコマンドを実行して、指定された範囲(デフォルトはファイル全体)に対して機能します(実行コマンドはコロンで始まります。例:viのdは削除を意味します)。あなたの場合はそうすることができます

:g/^$/d

間にスペースやタブがある場合

:g/^[\s\t]*$/d

お役に立てば幸いです。

関連情報