私は変更したい:
これ:
client 192.168.100.1 {
secret = ThisIStheSECRET
shortname = HOSTNAME
}
client 192.168.100.2 {
secret = ThisIStheSECRET2
shortname = HOSTNAME2
}
それ:
client HOSTNAME { secret = ThisIStheSECRET, ipaddr = 192.168.100.1 }
client HOSTNAME2 { secret = ThisIStheSECRET2, ipaddr = 192.168.100.2 }
どうすればいいですか?どのツールを使用する必要がありますか?
ベストアンサー1
簡単なawk
スクリプト:
awk '
/^client/ { ipaddr = $2 }
/^[[:blank:]]*shortname/{ shortname = $3 }
/^[[:blank:]]*secret/ { secret = $0; sub("^[^=]*= ", "", secret) }
/^}/ {
printf("client %s { secret = %s, ipaddr = %s }\n",
shortname, secret, ipaddr);
}' file
入力ファイルで必要な情報を見つけたら、簡単に解析し、行の先頭でを押すと}
収集された情報が正しい形式で出力されます。
テキストの解析は、テキストにsecret
次の内容が含まれると予想されるため、特別です。何もない、さらにフィールド区切り記号。最初に変数をsecret
完全な行に設定し、最初のスペースの前のすべてのエントリ=
とその後の単一のスペースを削除します。
与えられたファイル
client 192.168.100.2 {
secret = ThisIStheSECRET2
shortname = HOSTNAME2
}
client 10.0.0.1 {
secret = This is it, the secret!, ipaddr = 10.0.0.1
shortname = myhost.local
}
(パスワードの先頭にスペースが4つあることに注意してください。)これを行うと、次のような結果が得られます。
client HOSTNAME2 { secret = ThisIStheSECRET2, ipaddr = 192.168.100.2 }
client myhost.local { secret = This is it, the secret!, ipaddr = 10.0.0.1, ipaddr = 10.0.0.1 }