如何使用命令行在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