您如何 script/format YAML 文件在根级元素之上添加新行?
How do you script/format a YAML file to add a new line above root level elements?
我在 Rails 配置上有一个 Ruby 的 YAML 文件,格式如下
default: &default
api:
my_id: test
my_secret: test
development:
<<: *default
api:
domain: some domain
sso:
url: some_url
qa:
<<: *default
api:
我想编写一个脚本,在所有顶级元素上方添加一个新行。因此,例如当脚本或命令 运行s 反对上述内容时,它会产生
default: &default
api:
my_id: test
my_secret: test
development:
<<: *default
api:
domain: some domain
sso:
url: some_url
qa:
<<: *default
api:
但是当我运行这个命令
perl -pi -e 's/^^[ ](.*)$/\n/g' yamlfile.yml
它在每一行上方添加一个新行,而不仅仅是根元素。仅在顶级元素上方添加这样一个新行的正确方法是什么?
这应该能达到你想要的效果:
perl -pi -e 's/^\S/\n$&/' yamlfile.yml
^^
是多余的,[ ]
是你要匹配的相反的。我认为您的意思是 ^[^ ]
,这样更好,但是会在文件顶部插入一行。
解决方案:
perl -i -pe's/^(?=\S)/\n/ if $. != 1' yamlfile.yml
一次读入整个文件的方案:
perl -i -0777pe's/\n\K(?=\S)/\n/g' yamlfile.yml
以上都不会检查是否存在空行。另一方面,以下规范化 top-level 元素之前的空行:
perl -i -0777pe's/^\n+//; s/\n\K\n*+(?=\S)/\n/g' yamlfile.yml
我在 Rails 配置上有一个 Ruby 的 YAML 文件,格式如下
default: &default
api:
my_id: test
my_secret: test
development:
<<: *default
api:
domain: some domain
sso:
url: some_url
qa:
<<: *default
api:
我想编写一个脚本,在所有顶级元素上方添加一个新行。因此,例如当脚本或命令 运行s 反对上述内容时,它会产生
default: &default
api:
my_id: test
my_secret: test
development:
<<: *default
api:
domain: some domain
sso:
url: some_url
qa:
<<: *default
api:
但是当我运行这个命令
perl -pi -e 's/^^[ ](.*)$/\n/g' yamlfile.yml
它在每一行上方添加一个新行,而不仅仅是根元素。仅在顶级元素上方添加这样一个新行的正确方法是什么?
这应该能达到你想要的效果:
perl -pi -e 's/^\S/\n$&/' yamlfile.yml
^^
是多余的,[ ]
是你要匹配的相反的。我认为您的意思是 ^[^ ]
,这样更好,但是会在文件顶部插入一行。
解决方案:
perl -i -pe's/^(?=\S)/\n/ if $. != 1' yamlfile.yml
一次读入整个文件的方案:
perl -i -0777pe's/\n\K(?=\S)/\n/g' yamlfile.yml
以上都不会检查是否存在空行。另一方面,以下规范化 top-level 元素之前的空行:
perl -i -0777pe's/^\n+//; s/\n\K\n*+(?=\S)/\n/g' yamlfile.yml