我试图用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/ */ /g
或s/ +/ /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+'
并用下面的一个空格替换:
' '