如何在Linux/UNIX下使用sed命令删除空行

时间:2020-01-09 10:44:04  来源:igfitidea点击:

如何删除所有空行,但无法找出相同的sed命令。
在Linux或者类Unix系统下,如何删除sed的所有空行?

sed是流编辑器,非常适合此类工作。
您需要在sed下使用d命令作为删除功能。

Sed删除空行语法

使用sed删除空行的语法如下:

sed '/^$/d' <input-file>
echo "LINE" | sed '/^$/d'
echo "$VAR" | sed '/^$/d'
sed '/^[[:space:]]*$/d' input_file

例子

因此,要从名为/tmp/data.txt的文件中删除所有空行,请执行:

$ sed '/^$/d' /tmp/data.txt

要将输出存储到另一个文件,请使用重定向运算符:

$ sed '/^$/d' /tmp/data.txt > /tmp/output.txt

或者使用-i选项更新文件:

$ sed -i '/^$/d' /tmp/data.txt

仅使用sed删除所有空白

考虑以下文件:

more /tmp/data.txt

输出示例:

This is a test

foo

bar

theitroad

Linux and Unix

要删除所有空行,请运行:

sed '/^[[:space:]]*$/d' input.file
sed -i '/^[[:space:]]*$/d' input.file
sed -r '/^\s*$/d' input.file > output.file
sed -i '/^[[:space:]]*$/d' /tmp/data.txt

借助cat命令进行验证:

cat output.file
cat /tmp/data.txt

删除与模式匹配的行

您还可以匹配要删除的单词或者样式。
例如

$ cat data.txt

输出:

This is a test
Linux rulez
Windows sucks
Redhat is good server disro

要删除所有包含Windows单词的行,请执行:

$ sed '/Windows/d' /tmp/data.txt > /tmp/output.data.txt

GNU Sed支持-i选项来编辑文件:

$ sed -i '/Windows/d' /tmp/data.txt

关于awk的注意事项

与sed命令相比,awk命令提供了更简单的解决方案。
在此示例中,使用awk删除所有空行:

awk 'NF' my_input > my_output
cat my_output

总结

简而言之,在Linux,macOS,* BSD和类Unix系统下,使用以下sed语法中的任何一种从文本文件中删除所有空行:

sed '/^[[:space:]]*$/d' input > output
sed '/^\s*$/d' in > out
sed '/^$/d' input > output
sed -n '/^\s*$/!p' in.txt > out.txt