我正在尝试编写一个bash脚本,该脚本将使用带空格的文件并输出相同的文件,但以逗号分隔。我想出了如何用逗号替换空格,但是我遇到了一个问题:有些行的空格数量可变。有些行包含2或3个空格,有些行包含7或13个空格。这是我到目前为止的内容:
sed 's/ /,/g' $varfile > testdone.txt
$ varfile是用户提供的文件名。
但是我不确定如何解决可变空间问题。欢迎任何建议。谢谢。
答案 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 扩展正则表达式,“一个或多个”量词为+