コマンドラインを使用してUnix / Linuxでファイル内の空/空白(スペースのみを含む)行を削除するにはどうすればよいですか?
file.txtの内容
Line:Text
1:<blank>
2:AAA
3:<blank>
4:BBB
5:<blank>
6:<space><space><space>CCC
7:<space><space>
8:DDD
望ましい出力
1:AAA
2:BBB
3:<space><space><space>CCC
4:DDD
コマンドラインを使用してUnix / Linuxでファイル内の空/空白(スペースのみを含む)行を削除するにはどうすればよいですか?
file.txtの内容
Line:Text
1:<blank>
2:AAA
3:<blank>
4:BBB
5:<blank>
6:<space><space><space>CCC
7:<space><space>
8:DDD
望ましい出力
1:AAA
2:BBB
3:<space><space><space>CCC
4:DDD
回答:
このsed行はトリックを行う必要があります。
sed -i '/^$/d' file.txt
-i
それはその場でファイルを編集することを意味します。
bad flag in substitute command: 'e'
grep
簡単な解決策は、以下のようにgrep
(GNUまたはBSD)コマンドを使用することです。
空白行を削除します(スペースを含む行は含みません)。
grep . file.txt
完全に空白の行(スペースを含む行を含む)を削除します。
grep "\S" file.txt
注:不要な色が表示される場合、それgrep
はエイリアスですgrep --color=auto
(チェックボックスをオンにしますtype grep
)。その場合、--color=none
パラメーターを追加するか、コマンドを\grep
(エイリアスを無視して)実行するだけです。
ripgrep
と同様ripgrep
(より大きなファイルに適しています)。
スペースを含む行を含まない空白行を削除します。
rg -N . file.txt
またはスペースを含む行を含める:
rg -N "\S" file.txt
こちらもご覧ください:
sed
:sedを使用して空の行を削除しますawk
:awkを使用して空白行を削除しますgrep .
最も簡単な解決策のようです。
grep .
他のソリューションと比較した場合の欠点は、すべてのテキストが赤で強調表示されることです。他のソリューションは元の色を保持できます。比較unbuffer apt search foo | grep .
にunbuffer apt search foo | grep -v ^$
grep
でエイリアスさgrep --color=auto
れているため、色が表示されます(チェック:)type grep
。として実行する\grep
か、--color=none
パラメータを使用できます。
grep --color=none .
すると、すべての白いテキストが取得され、元のコマンドの色の書式設定が上書きされます(例:apt search foo
)
grep .
OPは望ましくないと言っているスペースのみを含む行に一致します。
sed '/^$/d' file.txt
dは、行を削除するsedコマンドです。^$
は、空白行のみに一致する正規表現であり、行の先頭に行の末尾が続きます。
grepで-vオプションを使用して、一致する空行を削除できます。
このような
grep -Ev "^$" file.txt
-E
少なくともGNU grepでは必要ではないと思いますが、それを除けば、これがgrepで行われることを嬉しく思います!それは毎回sedを優先して到達するものです。インラインフィルターは、インラインエディターよりも優れているように思えます。
grep -Ev '^#|^$' file.txt
先頭の空白を削除してもかまわない場合はxargs
$ docker run -it --rm alpine sh
/ # cat <<eof > /tmp/file
> one
>
> two
> three
>
>
> four
> eof
/ # cat /tmp/file
one
two
three
four
/ # cat /tmp/file | xargs -n1
one
two
three
four
私にとっては、@ martigin-heemelsコマンドはエラーを投げていましたが、これはそれを修正しました(つまり、iへのダミーパラメータ)、
sed -i '' '/^$/d' file.txt
おそらく、空白行を(スペースなしで)削除する最も簡単な方法は、以下を使用することcat -s
です。
$ cat -s file
$ some-command | cat -s
少なくとも、ファイルをその場で編集したくないが、たとえば代わりにターミナルに書き込みたい場合。また、それは面白い正規表現ビジネスを伴わないので、REに非友好的な人でも覚えやすいのです。
からman cat
:
-s, --squeeze-blank never more than one single blank line
異なるOSでは異なる場合がありますが、前回チェックしたときにいくつかのLinuxとOpenBSDで存在していました。