我正试图删除出现在dB字符串中的双引号,因为它在另一个应用程序中导致流错误。我无法清理dB来删除这些字符,因此我需要即时替换字符。
我尝试使用sed,ssed和perl都没有成功。这个正则表达式可以找到问题的引号,但是当我将其插入sed并将其替换为单引号时,我的输出仍然包含双引号。
sed "s/(\?<\!\t|^)\"(\?\!\t|$)/'/g" test.txt
我在Mac上,如果看起来有点奇怪。
正则表达式有效,但是当我在包含以下内容的制表符分隔文件中进行测试时:
"foo" "rea"son" "text's"
我的输出与以上相同。知道我在做什么错吗?
谢谢
答案 0 :(得分:0)
我假设您希望将不在字段边界上的所有"
(例如,制表符或字符串的开头/结尾之前或之后)都用'
进行翻转。
这可以使用perl和以下替换来完成:
s/(?<=[^\t])"(?=[^\t\n])/'/g;
(使用sed,这是直接不可能的,因为它不支持先行式/先行式断言。)
要在命令行上使用此代码,无论您使用什么外壳,都需要对其进行转义。假设bash或类似的sh-like shell:
perl -pe 's/(?<=[^\t])"(?=[^\t\n])/'\''/g' test.txt
在这里,我使用'...'
引用大部分代码。为了使单引号'
进入带引号的字符串,我离开引号区域...'
,添加转义的单引号\'
,然后切换回单引号的字符串'...
。这就是为什么文字'
在命令行上变成'\''
的原因。