我正在做一些文本操作,我想向配置文件内名为“object”的对象添加一个属性(在末尾)
例如
.
.
object = {
"one": "one",
"two": "two",
}
.
.
应该成为
.
.
object = {
"one": "one",
"two": "two",
"three": "three",
}
.
.
这是我的尝试,但我想知道是否有更干净的做事方式。
#find line for last property
line=$(grep -n "$(awk "/object/{f=1;next} /}/{f=0} f" file.txt | tail -n 1)" file.txt | awk -F : '{ print $1 }')
content='\"three\" = \"three\"'
awk 'NR=='$((line + 1))' {print "\t '"$content"'"} 1' file.txt > file.temp && mv file.temp file.txt
使用任何 awk:
如果要在一行后面的
"three": "three",
第一行之前插入,那么可能是:}
object = {
或者与以下相同
awk
:或者:
依赖于这样一个事实:该
$0 = ...
赋值将始终返回 true,保证既不是空字符串也不是零的任何表示形式。有点麻烦(和大多数 Perl 代码一样,当时我意识到我投入太多,无论如何都无法放弃这个东西),但这应该是一个合理的尝试,以正确的方式将赋值的右侧解析和修改
option
为伪 JSON。方式,使用 Perl 的 JSON 模块(在基于 Debian 的发行版上,您可以通过 安装该模块sudo apt install libjson-perl
,或者,当然,在任何发行版上,您可以通过 CPAN 安装该模块)。代码有时有点简洁,我只是粗略地了解发生了什么。
只是 Perl 代码,以更易于理解的方式格式化,并带有语法突出显示:
这会将键/值对添加到文件中分配
"foo":"bar"
的右侧找到的任何有效 JSON 中:option
input
我不会逐行分解它,但逻辑是:
foo:bar
(表示要添加的键/值对)并将其存储到变量中var
}
,以便将文件拆分为由每个 JSON 对象末尾分隔的多个记录option =
,则将记录的其余部分视为有效的“宽松”JSON 对象(宽松如:对象/数组的最后一个元素后面允许使用逗号,这不是严格有效的JSON)var
将 JSON 字符串反序列化为 Perl 哈希,并添加on拆分得到的键/值对:
注意事项: