2017-01-11 5 views
0

私はスクリプティングは初めてですが、既存のLinux/etc/hostsファイルからyamlファイルを作成する任務があります。ホストを使用して、ここでファイル:既存のlinux etc/hostsファイルからyamlファイルを作成するためのbashスクリプトを作成します。

127.0.0.1  localhost 
192.168.1.2 host1 
192.168.1.3 host2 
192.168.1.4 host3 
192.168.1.5 host4 

次のようになりYAMLファイルを作成..to:

host_entries: 
    host1: 
    ip: '192.168.1.2' 
    host2: 
    ip: '192.168.1.3' 
    host3: 
    ip: '192.168.1.4' 
    host4: 
    ip: '192.168.1.5' 

を私は所望の解に到達するための複数の方法があると知っています。しかし、私は正しいフォーマットを得るためにこれをどのようにスクリプト化するかについてはあまりよく分かりません。任意の提案をいただければ幸いです。

+1

まあ、何があなたがこれまでに試してみました:

は、これが発する、入力としてあなたの正確なホストファイルを考えると?あなたの仕事を最初に示してから、コミュニティの助けを求めてください。 – uTeisT

+0

私はこれまでこれを使っていませんでしたが、awkはbashからそれを正しく行うことができました。あなたはちょうどあなた自身でいくつかの研究をする必要があります – MikeVelazco

+0

*そのように見えるYAMLファイル、または*それと同等に*解析するYAMLファイル? YAMLはJSONのスーパーセットなので、簡単に 'jq'をタスクに使うことができます。 –

答えて

3

簡単かつ間違った(強く出力が可能なすべての入力に対して有効なYAMLになることを保証されません):

{ 
    printf 'host_entries:\n' 
    while read -r -a line; do 
    [[ ${line[0]} ]] || continue    # skip blank lines 
    [[ ${line[0]} = "#"* ]] && continue  # skip comments 
    [[ ${line[0]} = 127.0.0.1 ]] && continue # skip localhost 

    set -- "${line[@]}" # assign words read from line to current argument list 
    ip=$1; shift  # assign first word from line to ip 
    for name; do  # iterate over other words, treating them as names 
     printf " %s:\n ip: '%s'\n" "$name" "$ip" 
    done 
    done 
} </etc/hosts >yourfile.yaml 

...短い何か、間違った-ERのために、(編集履歴を参照してください以前のバージョンでも働いていました空白行、コメント、複数のホスト名を持つIPなどを正しく処理できませんでした)。

host_entries: 
    host1: 
    ip: '192.168.1.2' 
    host2: 
    ip: '192.168.1.3' 
    host3: 
    ip: '192.168.1.4' 
    host4: 
    ip: '192.168.1.5' 
+0

これはありがとうございました。構造化入力からyamlを生成する方法。 – LanceHaig

関連する問題