大佬教程收集整理的这篇文章主要介绍了替换成对出现的双引号,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想替换成对出现的双引号 "
字符。让我解释一下我的意思。
"Some sentence"
这里应该替换双引号,因为它们是成对出现的。
"Some sentence
此处不应替换 - 第一个引号字符没有匹配对。
我想用 „
替换第一个引号字符。
❯ echo „ |hexdump -C
00000000 e2 80 9e 0a
第二个引号字符带有 ”
❯ echo ” |hexdump -C
00000000 e2 80 9d 0a
总结如下:
Hi,"how
are you"
更换后应如下所示。
Hi,„how
are you”
我想出了以下代码,但它无法工作:
'sed -r s/(\")(.+)(\")/\1\xe2\x80\x9e\3\xe2\x80\x9d/g'
" hi "
给出 "„"”
。
编辑 根据评论中的要求,这里有一个来自要修改的文件的示例。重要说明:该文件是结构化的 - 也许它可能会有所帮助。该文件始终为srt文件,即电影字幕格式。
104
00:10:25,332 --> 00:10:27,876
KobIEta mówi do drugIEj:
"WIDzisz to,co ja?"
105
00:10:28,001 --> 00:10:30,904
A tamta: "No to co?
Każdy wygląda tak samo."
您的表达式不起作用,因为您有三个捕获组:三组 ()
。您将第一个(第一个引号)和第三个(最后一个引号)放在输出中,而忽略了第二个,这是您要保留的部分。
没有理由捕获引号,因为您不想将它们注入到输出中。只需要捕获中间的位。
还有一个缺陷,(.*)
本身会匹配包含引号的字符串。因此,/"(.*)"/
将匹配整个序列 "one"two"
,捕获 (.*)
匹配 one"two
。使用 [^"]*
匹配一系列非引号字符。
解决这个问题,并将整个文本文件视为一行 -z,这仅在文本文件中没有空字符时才有效,看来这是有效的:
sed -zE 's/"([^"]+)"/„\1“/g'
,
sed -rn ':a;s/"([^"]*)"/„\1”/g;/"/!{p;b;};$p;N;ba'
它将所有的 "xx"
替换为 „xx”
。如果结果不再包含 "
,则将其打印出来,然后我们从下一行重新开始。否则我们连接下一行并重新启动。 $p
只是在这里打印最后几行,如果它们包含一个悬空的 "
。
以上是大佬教程为你收集整理的替换成对出现的双引号全部内容,希望文章能够帮你解决替换成对出现的双引号所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。