Scripting
Bash - 更改文件配置格式
我想改變:
這:
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 }
這該怎麼做?使用什麼工具?
一個簡單的
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
當我們在輸入文件中找到所需的資訊時,只需解析它們,當我們在行首點擊 a
}
時,我們以正確的格式輸出收集到的資訊。文本的解析
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 }
(注意秘密開頭的四個空格),這會產生
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 }