apache_conf 用sed和awk从bash解析YAML。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了apache_conf 用sed和awk从bash解析YAML。相关的知识,希望对你有一定的参考价值。

#!/usr/bin/env bash
#
# vim: set ft=sh:
#
# Based on https://gist.github.com/pkuczynski/8665367

parse_yaml() {
    local prefix=$2
    local s
    local w
    local fs
    s='[[:space:]]*'
    w='[a-zA-Z0-9_]*'
    fs="$(echo @|tr @ '\034')"
    sed -ne "s|^\($s\)\($w\)$s:$s\"\(.*\)\"$s\$|\1$fs\2$fs\3|p" \
        -e "s|^\($s\)\($w\)$s[:-]$s\(.*\)$s\$|\1$fs\2$fs\3|p" "$1" |
    awk -F"$fs" '{
    indent = length($1)/2;
    vname[indent] = $2;
    for (i in vname) {if (i > indent) {delete vname[i]}}
        if (length($3) > 0) {
            vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])("_")}
            printf("%s%s%s=(\"%s\")\n", "'"$prefix"'",vn, $2, $3);
        }
    }' | sed 's/_=/+=/g'
}

parse_yaml config.yml
development_adapter=("mysql2")
development_encoding=("utf8")
development_database=("my_database")
development_username=("root")
development_apt+=("somepackage")
development_apt+=("anotherpackage")
development:
  adapter: mysql2
  encoding: utf8
  database: my_database
  username: root
  password:
  apt:
    - somepackage
    - anotherpackage

以上是关于apache_conf 用sed和awk从bash解析YAML。的主要内容,如果未能解决你的问题,请参考以下文章

使用 bash (sed/awk) 提取 CSV 文件中的行和列?

希望重新实现从 bash/grep/sed/awk/(auto)make/configure 到更健全的构建工具链(例如 boost.build 等)

使用awk / grep / sed / bash / vim进行正则表达式匹配和打印

在 bash/sed/awk 中提取文件的最后一个单词

使用 awk/sed/bash 检索所有必填字段后打印

Linux bash 文本处理命令awk,sed,grep 用法