sed命令将多个空格替换为单个空格

时间:2014-04-08 13:59:14

标签: regex shell sed

我尝试使用sed将文件中的多个空格替换为单个空格。

但它会分割下面的每个角色。 请让我知道问题是什么......

$ cat test.txt
 iiHi Hello   Hi
this   is   loga

$

$ cat test.txt | tr [A-Z] [a-z]|sed -e "s/ */ /g"
 i i h i h e l l o h i
 t h i s i s l o g a 

5 个答案:

答案 0 :(得分:17)

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

答案 1 :(得分:12)

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

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

也要进行缩写:tr -s '[:space:]' < test.txt | tr '[:upper:]' '[:lower:]'

答案 2 :(得分:3)

您可以使用awk来解决此问题:

awk '{$0=tolower($0);$1=$1}1' test.txt
iihi hello hi
this is loga

答案 3 :(得分:1)

sed 's/ \+/ /g' test.txt | tr [A-Z] [a-z]

sed 's/\s\+/ /g' test.txt | tr [A-Z] [a-z]

答案 4 :(得分:0)

也许您可以将以下正则表达式与多个空格匹配:

'\s+'

并仅用一个空格替换如下:

' '