这不是真的附加什么,我正在寻找,但因为我有未来的菜鸟在脑海中,我采取了包括它在标题的自由。
我正在寻找/捕获一行结束"
和]
在下一行(文件结束)在json文件(其中许多)。我在ripgrep中使用了多行选项,并转发了要用sed替换的结果列表。运行一个不带-l的sole rg,可以毫无问题地列出结果。问题出在sed部分。
cd path/to/folder
rg -l --multiline '(")(\n\])' regex/to/path/to/folders/settings.json | xargs sed -i 's/\("\)\(\n\]\)/\1,\nInputString\n\2/' *.json
- 我在多个文件夹中递归搜索(regex是正确的,因为我用它来替换其他文件夹,包括git)。
我想要的是在没有逗号的行后面放一个逗号(在末尾有捕获的引号),放一个新行,放一个字符串(我会自己处理空格和引号),另一个新行和一个]
来关闭json设置文件。
样品:
[
"data1",
"data2",
"data(n)"
]
预期结果:
[
"data1",
"data2",
"data(n)",
"inputstring"
]
不管我怎么努力,都没成功。最后的*.json
可能是多余的,就像rg命令部分的括号一样。但这些都不是问题所在。有什么问题吗?我是否缺少sed选项/标志?是否有需要转义的字符?也许是替换中的组的语法?
干杯
根据以下答案解决。
无法使用sponge
命令,正在使用find
(它足够快):
find path/to/folder -type f -name "settings.json" -exec sh -c 'jq --argjson s "[\"inputstring\"]" ". += \$s" "{}" | cat > tmp && mv tmp "{}"' \;
2条答案
按热度按时间t9eec4r01#
使用适当的工具:
jq
:要就地编辑 *,请执行以下操作:
omqzjyyz2#
您可以使用
+=
来更新数组。另外,使用--arg
从jq外部导入字符串。