繁体   English   中英

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

[英]sed command to replace multiple spaces into single spaces

我尝试使用 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 

您的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:]'

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

或者

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

很遗憾,因为*匹配零个或多个,它在每个字符后插入一个空格,您希望+匹配一个或多个。 我也改变了顺序,因为这样做你不必cat文件。

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

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

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

'\\s+'

并只替换一个空格,如下所示:

' '

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM