Bash-读取一个文件并用一个逗号替换多个空格



我正在尝试编写一个bash脚本,该脚本将接收一个带有空格的文件并输出相同的文件,但以逗号分隔。我想好了如何用逗号替换空格,但我遇到了一个问题:有些行的空格数可变。有些行包含2或3个空格,有些行包含多达7或13个空格。到目前为止,我拥有的是:

sed 's/ /,/g' $varfile > testdone.txt

$varfile是用户提供的文件名。

但我不知道如何解决可变空间问题。欢迎提出任何建议。非常感谢。

这不是sed的作业。tr更合适:

$ printf 'foo      barn' | tr -s ' ' ,
foo,bar

-s命令tr压制多次出现。此外,您还可以使用tr -s '[:space:]' ,(可能不需要它来替换换行符(或tr -s ' t' ,来处理空格或制表符。

您只需要使用+量词来匹配一个或多个

假设GNU sed

sed 's/ +/,/g' file
# or
sed -E 's/ +/,/g' file

对于GNU基本正则表达式,"一个或多个"量词是+
对于GNU
扩展规则表达式,"一个或者多个"量化器是+