![sed:-e 表达式 #1,字符 11:'s' 的未知选项](https://linux22.com/image/915625/sed%EF%BC%9A-e%20%E8%A1%A8%E8%BE%BE%E5%BC%8F%20%231%EF%BC%8C%E5%AD%97%E7%AC%A6%2011%EF%BC%9A's'%20%E7%9A%84%E6%9C%AA%E7%9F%A5%E9%80%89%E9%A1%B9.png)
我想删除逗号并收到此错误 -
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
包的工具(它将正确引用字段,允许您在逗号分隔格式中保留逗号),而不是尝试临时处理它们。