如何删除出现在两个边界之间的特定字符

如何删除出现在两个边界之间的特定字符

我有一个包含多行文本的文件。我需要删除引号"字符的所有实例。但是,我只想在它们落在两个边界之间时将其删除。

例如,示例行可能如下所示:

"status":0,"text":"some stuff goes in here. and some more "here","user":"1234"

下边界为"text":",上边界为","user"

因此,在上面的行中,只会"删除一个(在“此处”一词之前)。

我已经看到很多关于如何删除的例子一切在两个边界之间,但找不到更有针对性的东西。我确信这个问题已经被问过很多次了(所以我很抱歉),但我似乎找不到答案,所以如果有人能指出我正确的方向,我将不胜感激。

答案1

sed你一起可以做到:

sed -E ':a s/("text":"[^"]*)"(.*)(","user")/\1\2\3/;ta' infile
  • 第一个捕获的组包含"text":"后跟除双引号之外的任何字符[^"]*
  • 第一次出现的单个双引号
  • 第二个捕获组包含上述之后的任何内容(.*)
  • 第三个被俘虏的团体是","user"
  • :a s/find/replace/; taa如果替换成功则跳转到标签;每次重复我们都会删除找到的单引号"并返回其他所有内容(三个捕获的组)

相关内容