bash - 用sed替换字符串

时间:2014-06-07 15:04:18

标签: bash csv sed

出于某种神秘的原因,我的CSV数据中的某些元素显示为s/stWgvN52??f2& ?"而不是stWgvN522tw0JtZZnyXj,这会混淆文件,因为我已将;设置为CSV分隔符。

我尝试使用sed替换有缺陷的字符串,如下所示:

$ sed -i 's/stWgvN52??f2& ?"/stWgvN522tw0JtZZnyXj/g' file.csv

但是我收到以下错误:     sed:1:" access_logs_2014-04.csv":命令a期望\后跟文本

是什么原因?

1 个答案:

答案 0 :(得分:6)

使用-i选项时,必须指定所做备份文件的扩展名。某些版本的sed期望扩展名直接附加到-i选项,因此您编写的内容将起作用。但是其他版本(比如OS X上的版本)要求它是一个单独的选项,所以你必须写:

sed -i '' 's/stWgvN52??f2& ?"/stWgvN522tw0JtZZnyXj/g' file.csv

指定您不需要备份文件。