Awk 使用sed替换括号[]中的双引号逗号分隔符
我有下面给出的数据和一个大文件中的其他行数据。更具体地说,这是一个.json文件,我已经剥离了整个文件,除了这个捕获 数据: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未更改 “值
- ,“值”:[“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)。我不知道这是否更有效,无论如何,再次感谢。祝你好运