![用 sed 替换错误转义的引号](https://linux22.com/image/197785/%E7%94%A8%20sed%20%E6%9B%BF%E6%8D%A2%E9%94%99%E8%AF%AF%E8%BD%AC%E4%B9%89%E7%9A%84%E5%BC%95%E5%8F%B7.png)
我需要清理一个非常大的 CSV,它错误地转义了双引号(\\"
而不是\"
)。我怎样才能替换所有实例
\\"
\\\"
\\\\"
.....
有\"
空间还是只有空间?
既然\
我问这个问题是为了避免增加混乱。
答案1
这应该足够了:
sed 's/\\\\*"/\\"/'
这会将反斜杠 ( \\
) 后跟任意数量的反斜杠 ( \\*
) 和双引号 ( "
) 替换为反斜杠后跟双引号 ( \\"
)。使用sed 's/\\\\*"/\\"/g
' 替换一行中出现的所有内容。
答案2
sed
如果您支持扩展正则表达式的选项,则另一种选择-E
(这不计算反斜杠的数量):
sed -E 's/[\]+"/\\"/g' file