首页 > 解决方案 > 在单引号和双引号之前添加反斜杠

问题描述

我正在尝试在单引号和双引号之前添加反斜杠。我遇到的问题是我想排除三引号。

我现在所做的是:

对于单引号:

sed -e s/\'/\\\\\'/g test.txt > test1.txt

双引号:

sed -e s/\"/\\\\\"/g test.txt > test1.txt

我有这样的文字:

1,"""Some text XM'SD12X""","""Some text XM'SD12X""","""Auto " Moto " Some text"Some text"""

我想要的是:

120,"""Some text\'SD12X""","""Some text XM\'SD12X""","""Auto \" Moto \" Some text\"Some text"""

标签: regexsed

解决方案


如果perl没问题:

perl -pe 's/"{3}(*SKIP)(*F)|[\x27"]/\\$&/g'
  • "{3}(*SKIP)(*F)不要更改三重双引号
    • (\x27{3}|"{3})(*SKIP)(*F)如果您不应该更改三重单/双引号,请使用
  • |[\x27"]匹配单引号或双引号
  • \\$&\匹配部分的前缀

使用 sed,您可以用换行符替换三引号(因为默认的逐行使用模式空间中不能出现换行符),然后替换单/双引号字符,然后将换行符改回三引号。

# assuming only triple double quotes are present
sed 's/"""/\n/g; s/[\x27"]/\\&/g; s/\n/"""/g'

推荐阅读