使用 sed 删除空行
- 2024-10-10 08:38:00
- admin 原创
- 75
问题描述:
我正在尝试使用 sed 删除空行:
sed '/^$/d'
但我没有运气。
例如,我有以下几行:
xxxxxx
yyyyyy
zzzzzz
我希望它是这样的:
xxxxxx
yyyyyy
zzzzzz
这个代码应该是什么?
解决方案 1:
您的“空”行中可能包含空格或制表符。使用POSIX类sed
删除所有仅包含空格的行:
sed '/^[[:space:]]*$/d'
使用 ERE 的较短版本,例如使用 gnu sed:
sed -r '/^s*$/d'
(请注意,sed 不支持PCRE。)
解决方案 2:
我缺少awk
解决方案:
awk 'NF' file
将会返回:
xxxxxx
yyyyyy
zzzzzz
这是如何工作的?由于NF
代表“字段数”,那些为空的行有 0 个字段,因此 awk 将 0 评估为 False 并且不打印任何行;但是,如果至少有一个字段,则评估为 True 并执行awk
其默认操作:打印当前行。
解决方案 3:
sed
'/^[[:space:]]*$/d'
'/^s*$/d'
'/^$/d'
-n '/^s*$/!p'
grep
.
-v '^$'
-v '^s*$'
-v '^[[:space:]]*$'
awk
/./
'NF'
'length'
'/^[ ]*$/ {next;} {print}'
'!/^[ ]*$/'
解决方案 4:
sed '/^$/d'
应该没问题,您是否希望就地修改文件?如果是这样,您应该使用该-i
标志。
也许那些行不是空的,所以如果是这样的话,看看这个问题从 txtfiles 中删除空行,从行首和行尾删除空格我相信这就是您想要实现的。
解决方案 5:
我相信这是最简单,最快的一个:
cat file.txt | grep .
如果您还需要忽略所有空白行,请尝试以下操作:
cat file.txt | grep 'S'
例子:
s="\n\na\n b\n\nBelow is TAB:\n \nBelow is space:\n \nc\n\n"; echo "$s" | grep . | wc -l; echo "$s" | grep 'S' | wc -l
输出
7
5
解决方案 6:
另一个选项没有sed
、awk
、perl
等
strings $file > $output
字符串——打印文件中可打印字符的字符串。
解决方案 7:
借助此处接受的答案和上面接受的答案,我使用了:
$ sed 's/^ *//; s/ *$//; /^$/d; /^s*$/d' file.txt > output.txt
`s/^ *//` => left trim
`s/ *$//` => right trim
`/^$/d` => remove empty line
`/^s*$/d` => delete lines which may contain white space
这涵盖了所有基础,完全满足了我的需求。感谢原始发帖者@Kent 和 @kev
解决方案 8:
您尝试的命令是正确的,只需使用 -E 标志即可。
sed -E '/^$/d'
-E 标志使 sed 捕获扩展正则表达式。更多信息请见此处
解决方案 9:
你可以说:
sed -n '/ / p' filename #there is a space between '//'
解决方案 10:
您很可能看到意外行为,因为您的文本文件是在 Windows 上创建的,因此行尾序列是`
`。您可以在运行 sed 之前使用 dos2unix 将其转换为 UNIX 样式的文本文件,或者使用
sed -r "/^
?$/d"
删除空白行,无论是否有回车符。
解决方案 11:
这在 awk 中也有效。
awk '!/^$/' file
xxxxxx
yyyyyy
zzzzzz
解决方案 12:
您也可以使用“grep”做类似的事:
egrep -v "^$" file.txt
解决方案 13:
如果您想使用现代 Rust 工具,您可以考虑:
ripgrep:
cat datafile | rg '.'
有空格的行被视为非空行cat datafile | rg 'S'
有空格的行被视为空行rg 'S' datafile
带有空格的行被视为空行(-N
可以添加以删除屏幕显示的行号)
标准差
`cat datafile | sd '^
' ''`有空格的行被视为非空行`cat datafile | sd '^s*
' ''`有空格的行被视为空行`sd '^s*
' '' datafile`就地编辑
解决方案 14:
我的bash
具体答案是建议为此使用perl
带有全局模式标志的替换运算符,如下所示:g
$ perl -pe s'/^
|^[ ]*
//g' $file
xxxxxx
yyyyyy
zzzzzz
此答案说明了如何计算空行中是否有空格 ( [ ]*
),以及如何使用空格|
分隔多个搜索词/字段。已在 macOS High Sierra 和 CentOS 6/7 上测试。
仅供参考,OP 的原始代码在高性能超级计算集群上的 macOS High Sierra 和 CentOS 6/7 Linux 终端sed '/^$/d' $file
中运行良好。bash
解决方案 15:
使用 vim 编辑器删除空行
`:%s/^$
//g`
解决方案 16:
另一个用于 awk ifawk '/w+/ { print $0 }
解决方案 17:
对于我来说,使用 FreeBSD 10.1 和sed只有效这个解决方案:
sed -e '/^[ ]*$/d' "testfile"
里面[]
有空格和制表符。
测试文件包含:
fffffff next 1 tabline ffffffffffff
ffffffff next 1 Space line ffffffffffff
ffffffff empty 1 lines ffffffffffff
============ EOF =============
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件