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 

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

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+'

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

' '

相关内容

  • 没有找到相关文章

最新更新