我尝试使用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/ */ /g
或s/ +/ /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+'
并替换为一个空格,如下所示:
' '