sed命令将多个空格replace为单个空格

我试图用sed将文件中的多个空格replace为单个空格。

但它分裂了每一个像下面的字符。 请让我知道问题是什么…

$ cat test.txt iiHi Hello Hi this is loga $ $ cat test.txt | tr [AZ] [az]|sed -e "s/ */ /g" iihihellohi thisisloga 

你的sed命令会做错误的事情,因为它匹配“零个或多个空格”,当然每对字符之间会发生这种情况! 而不是s/ */ /g你需要s/ */ /gs/ +/ /g

使用tr-s选项会将连续的字符压缩到一个字符:

 tr -s '[:space:]' < test.txt 
  iiHi Hello Hi this is loga 

也要小心: tr -s '[:space:]' < test.txt | tr '[:upper:]' '[:lower:]' tr -s '[:space:]' < test.txt | tr '[:upper:]' '[:lower:]'

你可以用awk来解决这个问题:

 awk '{$0=tolower($0);$1=$1}1' test.txt iihi hello hi this is loga 
 sed 's/ \+/ /g' test.txt | tr [AZ] [az] 

要么

 sed 's/\s\+/ /g' test.txt | tr [AZ] [az] 

也许你可以匹配多个空格的以下正则表达式:

'\s+'

并用下面的一个空格替换:

' '