为什么sed不匹配非空白字符之间的多余空格

时间:2017-08-23 19:19:33

标签: sed

我有一个sed oneliner删除多余的空格:

sed -e 's/^\s*//' -e 's/\s*$//' -e 's/\s{2,}/ /g'

当我在" \tone1 two\t3three\t "上测试时,sed会删除行开头和结尾处的空格,但不会匹配单词之间的多余空格,sed会返回\tone1 two\t3three。我想要的是\tone1 two 3three,因此sed -e 's/[ \t]{2,}/ /g'无效。

regexr.com将表达式显示为功能性。

我的版本是GNU sed版本4.2.1。

1 个答案:

答案 0 :(得分:0)

{}需要在sed使用的基本正则表达式模式下进行转义。

但是,您只需使用替换进行一次替换就可以使用此sed

sed -E 's/^[[:blank:]]+|[[:blank:]]+$|[[:blank:]]{2,}//g' file

POSIX字符类[[:blank:]]匹配空格或制表符。