Mic*_*Ang 109 linux unix command-line-interface text parsing
如何使用命令行在 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
Run Code Online (Sandbox Code Playgroud)
期望输出
1:AAA
2:BBB
3:<space><space><space>CCC
4:DDD
Run Code Online (Sandbox Code Playgroud)
Mar*_*els 138
这个 sed 行应该可以解决问题:
sed -i '/^$/d' file.txt
Run Code Online (Sandbox Code Playgroud)
这-i意味着它将就地编辑文件。
ken*_*orb 67
grep简单的解决方案是使用grep(GNU或BSD)命令,如下所示。
删除空行(不包括带空格的行)。
grep . file.txt
Run Code Online (Sandbox Code Playgroud)删除完全空白的行(包括带空格的行)。
grep "\S" file.txt
Run Code Online (Sandbox Code Playgroud)注意:如果你得到不需要的颜色,那意味着你grep是别名grep --color=auto(检查由type grep)。在这种情况下,您可以添加--color=none参数,或仅以 as \grep(忽略别名)运行命令。
ripgrep类似于ripgrep(适用于更大的文件)。
删除不包括带空格的行的空行:
rg -N . file.txt
Run Code Online (Sandbox Code Playgroud)
或包括带空格的行:
rg -N "\S" file.txt
Run Code Online (Sandbox Code Playgroud)
也可以看看:
sed:使用 sed 删除空行awk:使用 awk 删除空行Kam*_*iel 31
sed '/^$/d' file.txt
Run Code Online (Sandbox Code Playgroud)
d 是删除一行的 sed 命令。^$是一个仅匹配空行的正则表达式,行开始后跟行结束。
小智 22
您可以将 -v 选项与 grep 一起使用来删除匹配的空行。
像这样
grep -Ev "^$" file.txt
Run Code Online (Sandbox Code Playgroud)
Ste*_*nny 13
这是一个awk解决方案:
awk NF file.txt
Run Code Online (Sandbox Code Playgroud)
使用 Awk,NF只在非空行上设置。当这个条件匹配时,Awk 的默认动作是打印整行。
小智 7
要删除空行,您可以使用以下命令挤压新行重复tr:
cat file.txt | tr -s '\n' '\n'
Run Code Online (Sandbox Code Playgroud)