使用 sed 删除多个空格

使用 sed 删除多个空格

我有一句话:

171211 22043707      21641 xxxx     xxxxxxx  From (,,xxxx,xxxx) Vxxxx1:  xxxxxx
171212 13441585        417 xxxx     xxxxxxxx Server manager informed of process termination, pinfo =  x,0000032585 13:44:15

171211 22043707问题是和之间的空格21641不同。我想用一个空格替换它。我该怎么做?哪个sed命令可以匹配一个或多个空格?

答案1

有了它,tr你就能更轻松地完成这些事情:

tr -s ' '

来自tr男人:

 -s, --squeeze-repeats
          replace each input sequence of a repeated character that is
          listed in SET1 with a single occurrence of that character

答案2

sed 's/ \{2,\}/ /' # or
sed -E 's/ {2,}/ /'

此命令将第一次出现的两个或多个 ( {2,}) 空格替换为单个空格,这与示例中的第一个大间隙相匹配。如果您想替换每一个g出现两个或多个空格,在命令末尾添加:

sed 's/ \{2,\}/ /g' # or
sed -E 's/ {2,}/ /g'

如果您只想替换三个或更多空格的序列,请相应地更改数字。

答案3

仔细阅读man sed,和man 7 regex,你就会明白:

sed -e 's/ \+/ /g'

将把整行上的多个相邻空格更改为一个空格。

相关内容