我有一个以下格式的文件:
"data","data","data",data"
。
现在,如果数据"
中包含 ,那么我的解析器就无法解析该文件。因此,我想使用 sed 替换 ,"
但"""
不要替换它看到的位置,","
因为那本质上是分隔符。
我不明白 sed 参数应该是什么。
答案1
我相信你也可以这样做,sed
但对我来说用 Perl 更容易:
perl -pe 's/([^,])\"/$1xxx/g; s/xxx,/\",/g; s/xxx/\"\"\"/g' data.txt
解释:
perl -pe
:在输入文件的每一行上执行命令行中给出的脚本s/([^,])\"/$1xxx/g;
:用"
随机字符串替换前面带有任何非逗号字符的xxx
。这假设您的数据永远不会包含xxx
。s/xxx,/\",/g;
:将xxx
后面带逗号的替换回",
。s/xxx/\\\"/g
xxx
:用转义引号替换其余部分\"
,这些将是"
您数据中的部分。
例子:
$ cat test.txt
"data","da"t"a","data","data","foo "bar" foo", "data"
$ perl -pe 's/([^,])\"/$1xxx/g; s/xxx,/\",/g; s/xxx//g' test.txt
"data","data","data","data","foo bar foo","data