用另一个字符串替换字符串 shell 脚本

用另一个字符串替换字符串 shell 脚本

我有一个以下格式的文件:

"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/\\\"/gxxx:用转义引号替换其余部分\",这些将是"您数据中的部分。

例子:

$ 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

相关内容