如何根据条件使用sed替换?

如何根据条件使用sed替换?,sed,Sed,我有一个文本文件行: 110254,TRCN,"OJSC "Transcontainer",LSE,1,2014-05-21,2014-11-28,,,2,,,0, 我想将中间的qoute字符从“改为\”,但不是逗号后面或前面的字符 更一般地说,我想使用sed来执行以下操作: 忽略/,*“/ 忽略/“*,/ 忽略/^*“/ 忽略/“*$/ 将所有其他“字符替换为\” 如何使用sed实现这一点?如果我了解这些要求,我相信您可以使用: sed 's/\([^,]\+\)"\([^,]\+\)/

我有一个文本文件行:

110254,TRCN,"OJSC "Transcontainer",LSE,1,2014-05-21,2014-11-28,,,2,,,0,
我想将中间的qoute字符从
改为
\”
,但不是逗号后面或前面的字符

更一般地说,我想使用sed来执行以下操作:

  • 忽略
    /,*“/
  • 忽略
    /“*,/
  • 忽略
    /^*“/
  • 忽略
    /“*$/
  • 将所有其他
    字符替换为
    \”

如何使用sed实现这一点?

如果我了解这些要求,我相信您可以使用:

sed 's/\([^,]\+\)"\([^,]\+\)/\1\\"\2/g'
它与任何
匹配,后面或前面没有逗号,而是与任何其他文本匹配,并将其替换为
\”
。为此,我使用
^
来否定逗号

> echo '110254,TRCN,"OJSC "Transcontainer",LSE,1,2014-05-21,2014-11-28,,,2,,,0,' | sed 's/\([^,]\+\)"\([^,]\+\)/\1\\"\2/g'

110254,TRCN,"OJSC \"Transcontainer",LSE,1,2014-05-21,2014-11-28,,,2,,,0,
这可能适用于您(GNU-sed):


谢谢这对我不起作用,我正在努力理解为什么。+代表什么?@Ana+至少匹配一个非逗号字符。你能举一个你期望的输出的例子吗?你得到的输出就是我正在寻找的输出。不知什么原因,我就是不明白。我刚拿回原来的台词。Mac sed的工作方式不同?
sed ':a;s/\([^,\\]\)"\([^,\\]\|$\)/\1\\"\2/g;ta' file