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 楼
这条sed行应该可以解决问题: sed -i '/^$/d' file.txt
-i
表示它将编辑文件就地。评论
实际上,它必须为“ / ^ * $ / d”才能删除仅包含空格的行。
– Sean Reifschneider
2011-3-28 23:36
@SeanReifschneider编写此答案时,该要求不是问题吗?
–卡巴斯德
16年4月18日在10:02
@SeanReifschneider“ / ^ \ s * $ / d”会不会更好,因为它会包含制表符?虽然在原始帖子中没有提到它,但对我来说似乎是一个更强大的选择。
– mrswadge
17-09-20在12:57
添加\ s *是stackoverflow问题给出的相同解决方案
–特雷弗·博伊德·史密斯
18年2月21日在19:17
我在替代命令中得到了错误的标志:'e'
–ishandutta2007
19年4月13日在2:12
#2 楼
grep
简单的解决方案是使用
grep
(GNU或BSD)命令,如下所示。删除空白行(不包括空格行) 。
grep . file.txt
完全删除空白行(包括带有空格的行)。
grep "\S" file.txt
注意:如果您得到不需要的颜色,则表示您的
grep
是grep --color=auto
的别名(请通过type grep
进行检查)。在这种情况下,您可以添加--color=none
参数,或仅将命令作为\grep
(忽略别名)运行。用于更大的文件)。删除不包括空格的行:
rg -N . file.txt
或包括空格的行:
rg -N "\S" file.txt
另请参阅:
如何从文件(包括制表符和空格)中删除空白行? >使用
ripgrep
:使用sed删除空行使用
ripgrep
:使用awk删除空白行评论
grep。似乎是最简单的解决方案。
–狮子座
18年3月21日在21:36
grep的缺点。与其他解决方案相比,它将以红色突出显示所有文本。其他解决方案可以保留原始颜色。比较unbuffer apt搜索foo | grep。解缓冲apt search foo | grep -v ^ $
– Wisbucky
19-4-25在23:09
@wisbucky您会看到颜色,因为grep在您的系统上别名为grep --color = auto(检查方式:键入grep)。您可以将其作为\ grep运行或使用--color = none参数。
– Kenorb
19-4-25在23:26
@kenorb如果使用grep --color = none。,您将获得所有白色文本,这些文本将覆盖原始命令的颜色格式(例如:apt search foo)
– Wisbucky
19年4月26日在2:01
grep。将匹配仅包含空格的行,OP则不希望这样。
– Jim L.
19年7月19日在21:53
#3 楼
sed '/^$/d' file.txt
^$是仅与空白行匹配的正则表达式,行开头为行,后为行结尾。
评论
+1说明
– Alex Raj Kaliamoorthy
18年2月17日在10:26
此命令不会产生与请求的OP相同的输出(它将产生5行,而不是4行)。
– Kenorb
19年7月22日在9:31
#4 楼
可以将-v选项与grep一起使用以删除匹配的空行。像这样
grep -Ev "^$" file.txt
评论
我不相信您需要-E,至少在GNU grep中不需要-E,但是除此之外,我很高兴看到使用grep完成此操作!每次我都会优先选择sed;在我看来,在线过滤器似乎比在线编辑器更好。
– MadHatter
2011年3月28日在22:45
如果要跳过注释行和空白行,尤其是在处理conf文件时,请使用grep -Ev'^#| ^ $'file.txt
– Govind Kailas
19 Mar 7 '19 at 4:11
如果使用@GovindKailas命令,则grep(GNU grep)3.4要求-E
–另一个用户
20年8月15日在4:07
#5 楼
这是一个awk
解决方案:awk NF file.txt
对于Awk,
NF
仅设置在非空白行上。当此条件匹配时,Awk的默认操作是打印整行。#6 楼
要删除空行,可以使用tr
挤压新行重复:cat file.txt | tr -s '\n' '\n'
评论
这将产生6行,而不是OP请求的4行。
– Kenorb
19年7月22日在9:34
#7 楼
Ex / Vim这是使用
ex
编辑器(Vim的一部分)的方法:ex -s +'v/\S/d' -cwq test.txt
对于多个文件(就地编辑) :
ex -s +'bufdo!v/\S/d' -cxa *.txt
注意:
:bufdo
命令不是POSIX。不修改文件(仅在标准输出上打印):
cat test.txt | ex -s +'v/\S/d' +%p +q! /dev/stdin
#8 楼
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
#9 楼
对我来说,@ martigin-heemels命令抛出错误,此错误已解决(例如,i的虚拟参数),sed -i '' '/^$/d' file.txt
评论
对于awk,请参阅:删除awk中的空行,或使用grep,通常请参阅:如何从shell中的文件中删除空行?这里给出了相同的问题和相同的答案,但票数更多
这是一个史诗般的答案,几乎可以使用grep,sed,awk给出所有可能的解决方案:stackoverflow.com/questions/16414410/…