我有一个Ruby on Rails配置的YAML文件,格式如下
default: &default
api:
my_id: test
my_secret: test
development:
<<: *default
api:
domain: some domain
sso:
url: some_url
qa:
<<: *default
api:
我想写一个脚本,将添加一个新的行以上的所有顶级元素。例如,当脚本或命令在上面运行时,它将生成
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$1/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/nK(?=S)/n/g' yamlfile.yml
以上都不检查是否存在空白行。另一方面,下面的代码规范了顶级元素前面的空行:
perl -i -0777pe's/^n+//; s/nKn*+(?=S)/n/g' yamlfile.yml