Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 从CLI更新YAML参数文件_Linux_Sed_Yaml_Command Line Interface - Fatal编程技术网

Linux 从CLI更新YAML参数文件

Linux 从CLI更新YAML参数文件,linux,sed,yaml,command-line-interface,Linux,Sed,Yaml,Command Line Interface,我对CLI中的mkdocs YAML文件更新有疑问。YAML文件具有以下字符串: ... site_name: Material for MkDocs ... 我需要的是操作site\u name参数: 在之前添加src/ 从参数中删除所有空格和特殊字符 输出应为: ... site_name: src/MaterialforMkDocs #OR site_name: src/Material_for_MkDocs ... 我做了以下操作,看起来它正在工作: newSiteName=$(gr

我对CLI中的mkdocs YAML文件更新有疑问。YAML文件具有以下字符串:

...
site_name: Material for MkDocs
...
我需要的是操作
site\u name
参数:

  • 在之前添加
    src/
  • 从参数中删除所有空格和特殊字符
  • 输出应为:

    ...
    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:][]*站点名称:[[:blank:][]*/{
    h;#复制该行
    s//#删除以前的正则表达式
    s/[[:blank:][]+/\ug;#将空格转换为下划线
    s、 ^,src/,;#添加前缀
    x;#交换保持空间和图案空间
    s/:*/:/;#删除该值
    G;#附加保留空间
    s/\n/;#删除换行符
    }
    “mkdocs.yml
    

    如果它看起来是正确的;添加
    -i
    选项。

    太棒了!只剩下一点,它不会删除特殊字符,例如,如果我有
    Mk!Docs
    在参数中,它将离开,因此我更新您的呼叫并添加
    s/[^a-z a-z 0-9][/g;#删除通话中
    s//
    之后的特殊字符
    ,它就可以工作了!输入
    site\u名称:Mk材料!文档
    Output
    site\u name:src/Material\u for\u MkDocs
    [^[:alnum:][ucode>更简洁,但同样具有描述性。