如何找到多个空格并用一个空格替换?

如何找到多个空格并用一个空格替换?

我想找到重复的空格(多个)并将其替换为一个空格。我试过:

sed -e 's/ []+/ /g' myfile.txt > myfile2.txt

这导致了一个空文件。为什么?以及如何实现我的目标?

答案1

您的命令出错:sed: -e expression #1, char 10: unterminated 's' command因此可能有一个空文件,因为没有生成标准输出。

尝试sed -e 's/ \+/ /g' myfile.txt > myfile2.txt

还:https://stackoverflow.com/questions/22939323/sed-command-to-replace-multiple-spaces-into-single-spaces

答案2

在标准中sed,要搜索一个或多个SPC字符,语法为:

sed 's/ \{1,\}/ /g'

或者

sed 's/  */ /g'

(星星前有两个空格)。或者使其更易读:

sed 's/[ ][ ]*/ /g'

一旦-E(对于扩展正则表达式)被添加到标准中(这应该在下一个主要 POSIX 版本中发生,许多实现已经支持它),您还可以这样做:

sed -E 's/ +/ /g'

某些sed实现还可以\+将基本正则表达式(不带-E)理解为 的别名\{1,\}

但在这里,你可以直接使用tr

tr -s ' ' < file.in > file.out

s挤压空间。

相关内容