sed:-e 表达式 #1,字符 11:'s' 的未知选项

sed:-e 表达式 #1,字符 11:'s' 的未知选项

我想删除逗号并收到此错误 -

sed: -e expression #1, char 11: unknown option to `s'

我使用的脚本是 -

# convert from tsv to csv
sed 's/,/\g; s/\t/,/g' "${tsv_file}" >> "${csv_file}"

答案1

正确的语法是:sed 's/ReplaceThisText/ByThis/g'

sed -e 's/,//g' -e 's/\t/,/g' "${tsv_file}" >> "${csv_file}"
# replace comma by nothing, then replace tab by comma

-e选项提供了连锁操作的能力

   -e script, --expression=script
          add the script to the commands to be executed

答案2

sed 替换 ( ) 命令的格式s

s/pattern/replacement/flags

因此,s/,/\g; s/\t/,/g它将其解释,为模式,\g; s替换,留下\t/,/g一系列标志。由于\t不是有效标志,因此这是一个错误。

你可能想的是

sed 's/,//g; s/\t/,/g' "${tsv_file}" >> "${csv_file}"

删除所有逗号,然后将制表符分隔符转换为逗号分隔符。但是,如果您有一个包含逗号的 TSV 文件,您可能需要考虑使用专用的 CSV 格式化工具,例如csvformat来自csvkit包的工具(它将正确引用字段,允许您在逗号分隔格式中保留逗号),而不是尝试临时处理它们。

相关内容