如何使用命令行在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
Answers:
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命令删除行。^$
是仅与空白行,行首和行尾匹配的正则表达式。
您可以将-v选项与grep一起使用以删除匹配的空行。
像这样
grep -Ev "^$" file.txt
-E
至少不需要使用GNU grep,但是除此之外,我很高兴看到使用grep完成此操作!这是我每次都优先于sed达成的目标;在我看来,在线过滤器似乎比在线编辑器更好。
grep -Ev '^#|^$' file.txt
对我来说,@ martigin-heemels命令抛出了错误,因此将其修复(例如,i的虚拟参数),
sed -i '' '/^$/d' file.txt