- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将 json(对象数组)转换为 ini 文件:
[
{
"connection": {
"id": "br0",
"uuid": "ab1dd903-4786-4c7e-a4b4-3339b144d6c7",
"stable-id": "",
"type": "bridge",
"interface-name": "br0",
"autoconnect": "no",
"autoconnect-priority": "0",
"autoconnect-retries": "-1",
"auth-retries": "-1",
"timestamp": "44444",
"read-only": "no",
"permissions": "",
"zone": "WAN",
"master": "",
"slave-type": "",
"autoconnect-slaves": "1",
"secondaries": "",
"gateway-ping-timeout": "0",
"metered": "unknown",
"lldp": "default"
},
"ipv4": {
"method": "manual",
"dns": "192.168.1.1,192.168.2.1",
"dns-search": "",
"dns-options": " ",
"dns-priority": "0",
"addresses": "192.168.1.3/24",
"gateway": "",
"routes": "192.168.10.0/24 192.168.1.1",
"route-metric": "-1",
"route-table": "0",
"ignore-auto-routes": "no",
"ignore-auto-dns": "no",
"dhcp-client-id": "",
"dhcp-timeout": "0",
"dhcp-send-hostname": "yes",
"dhcp-hostname": "",
"dhcp-fqdn": "",
"never-default": "no",
"may-fail": "yes",
"dad-timeout": "-1"
}
},
{
"connection": {
...
},
}
]
或
{
"connection": {
...
},
}
我尝试做的是:
<强>1。将json转成字符串
data=$(jq -r 'def keyValue: to_entries[] | "[\(.key)]\\n\(.value | to_entries|map("\(.key)=\(.value)" ) | join("\\n") )\\n"; if type == "array" then keys[] as $k | "\(.[$k] | .connection.id)=\(.[$k] | keyValue)" elif type == "object" then "\(.connection.id)=\(. | keyValue)" else keys end' /tmp/json)
提供:
br1=[connection]\nid=br1\nuuid=ab1dd903-4786-4c7e-a4b4-3339b144d6c7\nstable-id=\ntype=fff\ninterface-name=br0\nautoconnect=no\nautoconnect-priority=0\nautoconnect-retries=-1\nauth-retries=-1\ntimestamp=1525494904\nread-only=no\npermissions=\nzone=WAN\nmaster=\nslave-type=\nautoconnect-slaves=1\nsecondaries=\ngateway-ping-timeout=0\nmetered=unknown\nlldp=default\n
br1=[802-3-ethernet]\nport=\nspeed=0\nduplex=\nauto-negotiate=no\nmac-address=\ncloned-mac-address=\ngenerate-mac-address-mask=\nmac-address-blacklist=\nmtu=1500\ns390-subchannels=\ns390-nettype=\ns390-options=\nwake-on-lan=default\nwake-on-lan-password=\n....
<强>2。在 bash 中遍历字符串
while IFS="=" read -r key value; do [ "$oldkey" = "$key" ] && echo -en "$value" >> "/tmp/ini/$key" || echo -en "$value" > "/tmp/ini/$key" ; oldkey="$key"; done <<< "$data"
给予:
[connection]
id=br1
uuid=ab1dd903-4786-4c7e-a4b4-3339b144d6c7
stable-id=
type=fff
interface-name=br0
autoconnect=no
autoconnect-priority=0
autoconnect-retries=-1
auth-retries=-1
timestamp=1525494904
read-only=no
permissions=
zone=WAN
master=
slave-type=
autoconnect-slaves=1
secondaries=
gateway-ping-timeout=0
metered=unknown
lldp=default
[ipv4]
method=manual
dns=192.168.1.1,192.168.2.1
dns-search=
dns-options=
dns-priority=0
addresses=192.168.1.3/24
gateway=
routes=192.168.10.0/24 192.168.1.1
route-metric=-1
route-table=0
ignore-auto-routes=no
ignore-auto-dns=no
dhcp-client-id=
dhcp-timeout=0
dhcp-send-hostname=yes
dhcp-hostname=
dhcp-fqdn=
never-default=no
may-fail=yes
dad-timeout=-1
我快到了!但是有没有可能以更“优雅”和更高效的方式做到这一点,避免管道、外部调用等。
注意:另外,大部分应该用jq+bash来完成,因为sed、awk等其他处理工具比我做的慢,但我并不完全拒绝它们=)
P.S. - 此转换的主要目的是快速“批量操作”写入 ini 文件
最佳答案
要将所示的数组转换为“.ini”格式,只需使用此 jq 程序即可完成:
def kv: to_entries[] | "\(.key)=\(.value)";
.[]
| to_entries[]
| "[\(.key)]", (.value|kv)
把它放在一个文件中,比如 program.jq,然后假设问题中显示的 JSON(减去“...”部分)在 input.json 中,以下调用:
jq -rf program.jq input.json
产生相应的“.ini”文件。
如果你想确保程序也能处理没有封闭数组的情况,你可以修改上面主程序的第一行来测试输入是否是一个数组,所以你有:
if type == "array" then .[] else . end
| to_entries[]
| "[\(.key)]", (.value|kv)
关于json - 使用 jq + bash 将 json 转换为 ini 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50902634/
PHP 解释器是否首先加载它找到的 php.ini(根据其搜索算法)并停止。还是加载整个 php.ini 层次结构并合并设置? 因此,如果我需要覆盖单个网站的单个设置 - 我需要指定所有值,还是只需要
关于以下形式的归并排序算法: public static void merge(int [] a, int ini, int med, int end){ int [] b = new
如何从另一个 ini 文件解析变量? 在下面的例子中,我想解析 var_a来自 original_configuration.ini并在 new_configuration.ini 使用它 origi
我无法获取 ini 文件中数组的值。 这是 ini 文件: module.name = Core module.version = 1 module.package = 'Core Modules'
编辑 eclipse.ini (OS Ubuntu 12.04 LTS) 后无法保存。如何在 eclipse.ini 文件或任何其他 .ini 文件中进行更改? Eclipse 和 Scala IDE
我目前正在使用 Zend Framework 从事个人项目。我一直无法获得良好的搜索结果,也没有问过我的同事:-/。 我在工作中经常使用 Ant/Phing,你有一个叫做“属性文件”的东西,它们有这个
我想提高我的 mysql 性能。所以我尝试使用 my-large.ini。 首先,我将该文件重命名为 my.ini。然后我在 [mysqld] 下添加了以下行 port=3306 basedir="C
我似乎遇到了一个问题,但感觉它不是一个问题,但我看不到解决方案,所以也许其他人可以。 我正在使用 ini 文件来存储我正在编写的包的配置详细信息。此 ini 文件包含与其他 ini 文件相关的部分。
我正在使用 Java API ini4j解析 ini 文件。我的原始 .ini 文件具有以下键值格式: [section] key=value = 字符周围没有空格。 但是在使用 ini.store(
我有写一段 ini 文件的函数: boolean saveSSVar() { using boost::property_tree::ptree; ptree pt; pt.p
最近我在 ubuntu 16.04 机器上安装了 lamp 和 php-xdebug。我注意到现在我有以下文件 /etc/php/7.0/apache2/conf.d/20-xdebug.ini /e
我正在尝试为我的 Pyramid 项目配置 SQLAlchemy Alembic,我想使用我的 developement.ini(或 production.ini)来配置 Alembic。是否可以指定
我的 FlashBuilder 实例在进行一些繁重的分析时不断崩溃。 必须说,我也在生成对象分配跟踪(全部,而不是默认的 10 个)并大量遍历 GC 路径。 但是我有一种预感,我可以通过允许 Flas
我是网络世界的新手,想知道当服务器默认 php.ini 文件时,自定义 php.ini(我们手动创建并添加到每个目录) 文件,.user.ini 文件由服务器加载/读取? 根据我的概念,这些文件在每次
在创建组件时,我在Joomla的组件目录结构中看到了两个语言文件:.ini和 sys.ini .有什么不同? 最佳答案 虽然@Lodder 本质上是正确的 sys.ini文件实际上有 3 个角色。 它
是否可以加载一个自定义的 .ini 文件来覆盖分发包中乱七八糟的 php.ini? 在 unix 系统上,我相信这可以通过在 /etc/php.d 中放置额外的 ini 文件来实现,但我不确定 IIS
如何在另一个 php.ini 文件中包含一个 php.ini 文件? 最佳答案 我认为您不能从主 php.ini 文件中“包含”.ini 文件。 不过,一个可能的解决方案可能是在编译 PHP 时在配置
您好,我有一个代码,其中使用了几个 INI 文件进行预定义设置。我可以在 INI 文件中使用#ifdef 吗?如果可以,我该如何使用它?如果不是,我如何限制我对 INI 文件的代码编译。例如我有一个宏
下面的代码片段可以编辑 ini 文件,但会将所有 ini 条目替换为小写: config = ConfigParser.RawConfigParser() config.read("test.ini"
我按照 this article 中的说明安装并运行 drush :我的服务器是cloudlinux和cagefs.drupal7 Drush 使用全局 php.ini 文件而不是 drish.ini
我是一名优秀的程序员,十分优秀!