我尝试使用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
答案 0 :(得分:17)
你的sed
命令做错了,因为它匹配“零或多个空格”,这当然发生在每对字符之间!而不是s/ */ /g
,而是s/ */ /g
或s/ +/ /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+'
并仅用一个空格替换如下:
' '