Awk 使用sed替换括号[]中的双引号逗号分隔符

Awk 使用sed替换括号[]中的双引号逗号分隔符,awk,sed,grep,Awk,Sed,Grep,我有下面给出的数据和一个大文件中的其他行数据。更具体地说,这是一个.json文件,我已经剥离了整个文件,除了这个捕获 数据: ,“值”:[“ABC-DE”,“XYZ-MN”] ,“值”:[“MNO-RS”],“子单元id”:01 “值”:“[\”新-XYZ\“]” ,“值”:[“ABC-DE”、“XYZ-MN”、“MNO-BE”、“FRS-ND”] 我希望数据看起来像这样 ,“值”:[“ABC-DE,XYZ-MN”]-已更改 ,“值”:[“MNO-RS”],“子单元id”:01未更改 “值

我有下面给出的数据和一个大文件中的其他行数据。更具体地说,这是一个.json文件,我已经剥离了整个文件,除了这个捕获

数据:

  • ,“值”:[“ABC-DE”,“XYZ-MN”]
  • ,“值”:[“MNO-RS”],“子单元id”:01
  • “值”:“[\”新-XYZ\“]”
  • ,“值”:[“ABC-DE”、“XYZ-MN”、“MNO-BE”、“FRS-ND”]
我希望数据看起来像这样

  • ,“值”:[“ABC-DE,XYZ-MN”]-已更改
  • ,“值”:[“MNO-RS”],“子单元id”:01未更改
  • “值”:“[\”新-XYZ\”],“-非托管
  • ,“值”:[“ABC-DE,XYZ-MN,MNO-BE,FRS-ND”]-已更改
到目前为止,我已经有了这段代码,但是它似乎将整个文件替换为“”,而不仅仅是[]中的文件

sed 's/\(\[\|\","\|\]\)/\,/g' testfile_1.txt >testfile_2.txt
任何帮助都会很好

**注:编辑的第四个条件


干杯。

如果没有非贪婪匹配的perl正则表达式,情况会更糟,但这似乎可以做到

sed -e 's/\([^\[]*\"[A-Z\-]*\)\",\"\(.*\)/\1,\2/'

感谢您对clearlight的贡献

以下是我对多次出现的问题的解决方案

sed -e ': a' -e 's/\(\[[^]]*\)","/\1,/' -e 't a' testfile_1.txt >testfile_2.txt
使用标签“a”直到标签“a”结束

伪代码:

while (not end of line){ replace "," with ' }

谢谢@clearlight,但我找到了一种传统方法;)这是一个传统的POSIX正则表达式,而不是perl。你的解决方案是什么?你能更新你的问题吗?如果我的答案是好的,请点击√ 选中它旁边的复选标记。谢谢对不起,我的意思是你能添加你的答案,这样我们就可以看到另一种解决方法了吗?或者说传统是指非正则表达式?我们的两个答案似乎都能做到这一点,但这里有一个场景没有通过我的代码:sed-e的/([^]]*),“/\1,/”testfile_1.txt>testfile_2.txtavin!干得好。很高兴你能坚持下去。令人满意的。感激它。量词?,+,{n},{n,m}和{n,}重复前面的标记零或一次,一次或多次,n次和m次之间,n次或多次,sed默认为BRE:sed的默认行为是支持基本正则表达式(BRE)。要使用扩展功能,请将-r(Linux)或-E(BSD)标志设置为使用ERE。像一个删除所有引号,然后另一个sed传递将它们添加回需要的地方?(换句话说,daisychaining-sed)。我不知道这是否更有效,无论如何,再次感谢。祝你好运