php - 使用 php 或 bash 从目录中的 yaml 文件中删除 yaml 属性及其定义
问题描述
我有许多 yaml 文件,它们在多行上有一个属性定义:
approval_date:
label: inline
type: datetime_plain
weight: 3
region: content
settings:
timezone_override: ''
third_party_settings: { }
我希望能够从所有 yaml 文件中删除approval_date 及其定义。我尝试了一个简单的正则表达式搜索和替换,它在一定程度上起作用,但定义因不同文件而异。有没有一种更简单的方法可以使用 bash 脚本或类似的东西来删除属性及其定义?
解决方案
Bash 本身不会处理 yaml,而且我还没有成功使用任何应该为它添加半心半意的支持的各种库。
但是,我已经成功地将 yaml 视为 JSON 使用y2j
,这允许您的 yaml 使用jq
.
见证:
$ cat x.yml
keep_me: foo
approval_date:
label: inline
type: datetime_plain
weight: 3
region: content
settings:
timezone_override: ''
third_party_settings: { }
more_to_keep:
label: bar
$ yq 'del(.approval_date)' < x.yml
keep_me: foo
more_to_keep:
label: bar
请注意,该yq
命令是指向y2j.sh
bash 脚本的链接。jq
可以使用操作系统的普通包管理器将该命令添加到您的系统中。
当然,仅在 PHP 中执行此操作可能更容易。
$ php -r '$a=yaml_parse_file("x.yml"); unset($a["approval_date"]); print_r($a);'
Array
(
[keep_me] => foo
[more_to_keep] => Array
(
[label] => bar
)
)
甚至:
$ php -r '$a=yaml_parse_file("x.yml"); unset($a["approval_date"]); print yaml_emit($a);'
---
keep_me: foo
more_to_keep:
label: bar
...
推荐阅读
- java - Android - 可以使用两个词作为包名吗?
- c - 中缀到后缀循环
- postgresql - Can we monitor AWS RDS PostgreSQL queries and stats using Newrelic?
- r - 如何使用睡眠和唤醒时间计算睡眠持续时间
- python - 有没有更有效的方法将一个列表从另一个列表的中心切出?
- django - “This field is required” when all fields are filled in Django
- tensorflow - Training model on the same data for too long make its predictions unusable even for training data
- html - 使用 css 为移动设备显示另一个图像
- google-drive-api - Google - Backup and synch - Way to obtain full listing of skipped files
- spring-boot - Spring Boot Eureka 服务器项目未启动