如何在 Shell 脚本中随后出现的 2 个字符串模式之间替换字符串?

How to replace a string between subsequent occurrence of 2 string pattern in Shell scripting?

我有一个包含几行的文件,例如:

"key1":"val1","key2":"val2","key3":"val3","key4":"val4"

vi 编辑器中或使用 sed 我想用 "," 替换 ":""," 之间的所有文本,即我想保留所有键并删除所有值。

该行会变成这样:

"key1","key2","key3","key4"

vi 编辑器中我尝试使用 :%s/":".*","/","/g,而使用 sed 我使用 sed 's/":"*","/","/' 但它没有替换中间文本,而是删除了所有第一次出现 ":" 和最后一次出现 "," 的文本,即该行正在变为 "key1","key4":"val4".

如何替换后续出现的 ":""," 之间的文本?

假设键和值都不能包含 ",这个 sed 解决方案将起作用:

   sed 's/\("[^"]*"\):"[^"]*"//g'

解释:

  • s/ 替换
  • /\("[^"]*"\):"[^"]*"/搜索"stuff":"more stuff",这里假定stuff中没有其他双引号"等,然后抓取第一部分(\(\)
  • //只保留第一部分
  • /g 并继续