我尝试使用单引号解析文件,并希望将其更改为双引号。
示例数据:
{'data': ['my',
'my_other',
'my_other',
'my_other',
'This could 'happen' <- and this ones i want to keep',
],
'name': 'MyName'},
'data2': {'type': 'x86_64',
'name': 'This',
'type': 'That',
'others': 'bla bla 'bla' <- keep this ones too',
'version': '21237821972'}}}
期望的输出:
{"data": ["my",
"my_other",
"my_other",
"my_other",
"This could 'happen' <- and this ones i want to keep"
],
"name": "MyName"},
"data2": {"type": "x86_64",
"name": "This",
"type": "That",
"others": "bla bla 'bla' <- keep this ones too",
"version": "21237821972"}}}
我已经尝试用sed做一些正则表达式,但不幸的是。 我理解为什么这对我不起作用,只是不知道如何进一步获取我想要的数据。
sed -E -e "s/( |\{|\[)'(.*)'(\:|,|\]|\})/\1\"\2\"\3/g"
干杯,
答案 0 :(得分:0)
我不是jq的专家,所以根据OP的问题试图用awk回答来代替'to'。
awk -v s1="\"" '!/This could/ && !/others/{gsub(/\047/,s1) } /This could/ || /others/{gsub(/\047/,s1,$1)} 1' Input_file
输出如下。
{"data": ["my",
"my_other",
"my_other",
"my_other",
"This could 'happen' <- and this ones i want to keep',
],
"name": "MyName"},
"data2": {"type": "x86_64",
"name": "This",
"type": "That",
"others": 'bla bla 'bla' <- keep this ones too',
"version": "21237821972"}}}
答案 1 :(得分:0)
我们知道'sed'命令可以搜索模式,并可以用用户提供的新模式替换该模式
例如sed“s / pattern1 / pattern2 / g”filename.txt
现在'sed'命令将搜索pattern1,如果发现它将替换为pattern2
根据您的要求,您只需要应用此规则。见下文
首先 sed&#34; s / ^ \&#39; / \&#34; / g“yourfile
这将搜索文件中包含字符'的每个换行符,并替换为“
下一个要求是搜索模式':并替换为“:
所以再添加一个条件,用;分隔;
sed&#34; s / ^ \&#39; / \&#34; / g; s / \&#39;:/ \&#34;:/ g“yourfile
只需遵循此算法,直到达到您的要求
决赛应该是这样的: -
sed&#34; s / ^ \&#39; / \&#34; / g; S / \&#39;:/ \&#34;:/克; S / {\&#39; / {\&#34; /克; S / \ [\&#39; / \ [\& #34; / g; s / \&#39;,/ \&#34;,/ g; s / \&#39;} / \&#34;} / g; s /:\&#39; /:\&#34; / g;&#34;你的文件&gt; newfil
(如果上面的命令给你错误,那么只需在最开始使用命令)
最后 mv newfile yourfile