Guf*_*oru 5 string text-processing json
我有test.json
不同长度的行的文件。一些虚构的例子:
{ a: 123, b: sd, c: x45, d: 1, e: '' }
{ a: 5, b: bfgg, c: x4c, d: 31, e: '' }
Run Code Online (Sandbox Code Playgroud)
我想在d
- 部分之后剪切整个子字符串并返回每一行:
{ a: 123, b: sd, c: x45 }
{ a: 5, b: bfgg, c: x4c }
Run Code Online (Sandbox Code Playgroud)
echo test.json | sed 's/. d:/' > newtest.json
Run Code Online (Sandbox Code Playgroud)
我需要为整个文件做这件事,而不仅仅是一行。
如果您在命令行上进行了大量转换 json 的工作,那么非常值得您花时间获取 jq 工具并学习使用它。
虽然上面的答案表明您可以在不实际解析 json 的情况下进行最少的转换,但最终您将通过正则表达式重新发明一个有缺陷的 json 解析器,或者恢复使用您选择的语言中的本机 json 解析器。
jq 速度快,使用简单,是您工具箱中非常方便的工具。
BWT,您的测试数据是无效的 json,这将使上述解决方案变得复杂。如果你将其修复为
{ "a":123 , "b": "sd", "c": "x45", "d": 1, "e": "" }
{ "a":5 , "b": "bfgg", "c": "x4c", "d": 31, "e": "" }
Run Code Online (Sandbox Code Playgroud)
那么这个 jq 命令就会满足你的要求
jq -c '{a,b,c}' test.json
{"a":123,"b":"sd","c":"x45"}
{"a":5,"b":"bfgg","c":"x4c"}
Run Code Online (Sandbox Code Playgroud)
sed '/d:/s/, d:[^}]*/ /' test.json
Run Code Online (Sandbox Code Playgroud)
它将遍历整个文件并删除每一行的d:
所有, d:.*
部分直到}
符号(}
符号将保留在该行上)。