#1 楼
字符类\s
将匹配空白字符<tab>
和<space>
。例如,$ sed -e "s/\s\{3,\}/ /g" inputFile
将替换至少3个空格的每个序列
备注:
为了符合POSIX,请使用字符类
[[:space:]]
代替\s
,因为后者是GNU sed扩展。请参阅sed和BRE的POSIX规范#2 楼
这适用于MacOS 10.8:sed -E "s/[[:space:]]+/ /g"
评论
您知道这是否适用于所有Linux发行版吗?
–两栖动物
2014年2月6日在17:26
通常,GNU sed不会具有-E。在BSD sed手册页中:“ -E,-a和-i选项是非标准的FreeBSD扩展,可能在其他操作系统上不可用。”
–布拉德·科赫(Brad Koch)
2014年3月18日在21:19
为什么+运算符需要-E标志?大多数表达式都可以用*代替,然后在其他平台上也可以使用。
–塞缪尔
15年3月21日在0:05
@Samuel如果使用*,则正则表达式将匹配零个或多个空格,并且每个字符之间将有一个空格,并且每行的每一端都有一个空格。如果没有-E标志,则要sed“ s / [[:: space:]] \ + / / g匹配一个或多个空格。
– jbo5112
16年1月20日在20:49
FWIW,NetBSD的sed也支持-E标志。
– mcandre
17-12-29在21:53
#3 楼
某些较早版本的sed可能不会将\ s识别为空格匹配标记。在这种情况下,您可以将一个或多个空格和制表符的序列与'[XZ] [XZ] *'匹配,其中X是空格,Z是制表符。评论
因此,对于特殊需要,使用老版本的sed,您可以执行以下操作:$ sed's / [XZ] [XZ] [XZ] [XZ] * / / g'输入文件,其中X是制表符,Z是空格。
– Marnix A. van Ammers
2010-4-12 15:08
#4 楼
sed 's/[ \t]*/"space or tab"/'
评论
是否保证可以在任何系统上的任何版本的sed上使用?如果不是的话,也许值得一提的是它在哪些方面的工作方式与其他答案类似,所以我们知道了局限性以及在哪些方面可能没有预期的结果。
–Mokubai♦
2014年7月22日在20:34
这是我用来匹配空白的RE。它比仅用于匹配制表符或空格的字符类要简单。它仅使用正则表达式的最基本约定,因此它应在具有正则表达式功能实现的任何地方使用。
–内特
14-10-18在4:50
在Mac 10.9.5上,这匹配空格和't'。我使用了上面的Michael Douma来匹配空白字符(它也可以与-e一起使用)。
–外星生命表
15年7月31日在18:32
在我的SUSE系统上无法正常工作。它匹配行中零个或多个空格的第一个位置,该位置在第一个字符之前。我怀疑这是预期的功能,当然不是所要求的用例。我相信您想将'*'更改为'\ +'(或每个问题为'\ {3,\}'),并可能在sed命令的末尾添加一个g以匹配所有出现的模式。如果行中还有其他空格,也可能需要用[[:space:]]替换[\ t]。
– jbo5112
16年1月20日在20:59
无法在我的macOS Catalina上使用
–杰里·格林(Jerry Green)
20年11月5日,19:02
#5 楼
以上都不对我有用。但是我通过使用awk找到了最简单的答案user@~[]$ cat /tmp/file
/nospace/in/here
/this/one space
/well/seems we have spaces
user@~[]$ cat /tmp/file |awk 'NF>1'
/this/one space
/well/seems we have spaces
user@~[]$
评论
啊哈!正是缺少的-e开关吸引了我。
–停止莫妮卡·赛利奥(Monica Cellio)
2011-09-12 14:44
我还必须添加“ -r”开关,该开关允许扩展的正则表达式使sed识别“ \ s”为空格。
– HUB
2012年5月16日15:12
对于Apple的sed,我不得不使用[[:space:]],因为\ s对我不起作用。也许\ s是GNU sed扩展名?
–Jared Beck
2013年6月17日23:24
@JaredBeck谢谢,我的简单正则表达式无法正常工作的想法已经用尽了。.这很la脚,我以为\ s是标准扩展正则表达式。.-r无效,-E蹲了
– Karthik T
2013年9月11日下午4:58
可以使用[[:blank:]]代替[[:space:]],它只匹配水平制表符和空格(但不匹配换行符,垂直制表符等)。
–stefanct
17-10-13在13:10