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

时间:2018-12-11 18:34:13

标签: bash unix

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

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

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

但是我不确定如何解决可变空间问题。欢迎任何建议。谢谢。

2 个答案:

答案 0 :(得分:6)

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

$ printf 'foo      bar\n' | tr -s ' ' ,
foo,bar

-s告诉tr挤压多次出现。另外,您可以使用tr -s '[:space:]' ,(将替换换行符,可能会替换掉它们)或tr -s ' \t' ,进行概括,以处理空格或制表符。

答案 1 :(得分:2)

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

假设GNU sed

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

对于GNU 基本正则表达式,“一个或多个”量词为\+
使用GNU 扩展正则表达式,“一个或多个”量词为+

相关问题