从 CLI 更新 YAML 参数文件

Update YAML parameter file from CLI

我有一个关于从 CLI 更新 mkdocs YAML 文件的问题。 YAML 文件具有以下字符串:

...
site_name: Material for MkDocs
...

我需要的是操作site_name参数:

  1. 之前添加src/
  2. 从参数中删除所有空格和特殊字符。

输出应该是:

...
site_name: src/MaterialforMkDocs
#OR
site_name: src/Material_for_MkDocs
...

我做了以下操作,看起来它在工作:

newSiteName=$(grep "site_name:" mkdocs.yml | sed 's/ //g' | sed 's/[^a-z  A-Z 0-9 _]//g' | sed 's/site_name/site_name: src\//')

sed -i "s|site_name:.*|$newSiteName|" mkdocs.yml

我坚信这可以很容易地解决。

调用 sed 一次:

sed -E '
    /^[[:blank:]]*site_name:[[:blank:]]*/ {
        h                       ;# copy the line
        s///                    ;# remove the previous regex
        s/[[:blank:]]+/_/g      ;# convert whitespace to underscores
        s,^,src/,               ;# add the prefix
        x                       ;# swap hold and pattern spaces
        s/:.*/: /               ;# remove the value
        G                       ;# append the hold space
        s/\n//                  ;# remove the newline
    }
' mkdocs.yml

如果看起来不错;添加 -i 选项。

您还可以使用 yq - 专门用于 yaml 文档的工具,包括编辑前言:

yq e --front-matter=process '.site_name |= "src/" + sub("[^a-zA-Z]", "")' file.yaml

https://mikefarah.gitbook.io/yq/usage/front-matter#process-front-matter

爆料:我写了yq