我有一个包含多行文本的文件。我需要删除引号"
字符的所有实例。但是,我只想在它们落在两个边界之间时将其删除。
例如,示例行可能如下所示:
"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/; ta
a
如果替换成功则跳转到标签;每次重复我们都会删除找到的单引号"
并返回其他所有内容(三个捕获的组)