您如何 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