我們有以下文字文件,這是設定檔:
advertised.host.name: DEPRECATED: only used when advertised.listeners or listeners are not set. Use advertised.listeners instead. Hostname to publish to ZooKeeper for clients to use. In IaaS environments, this may need to be different from the interface to which the broker binds. If this is not set, it will use the value for host.name if configured. Otherwise it will use the value returned from java.net.InetAddress.getCanonicalHostName().
Type: string
Default: node1
Valid Values:
Importance: high
Update Mode: read-only
advertised.listeners: Listeners to publish to ZooKeeper for clients to use, if different than the listeners config property. In IaaS environments, this may need to be different from the interface to which the broker binds. If this is not set, the value for listeners will be used. Unlike listeners it is not valid to advertise the 0.0.0.0 meta-address.
Type: string
Default: null
Valid Values:
Importance: high
Update Mode: per-broker
advertised.port: DEPRECATED: only used when advertised.listeners or listeners are not set. Use advertised.listeners instead. The port to publish to ZooKeeper for clients to use. In IaaS environments, this may need to be different from the port to which the broker binds. If this is not set, it will publish the same port that the broker binds to.
Type: int
Default: 5500
Valid Values:
Importance: high
Update Mode: read-only
auto.create.topics.enable: Enable auto creation of topic on the server
Type: boolean
Default: true
Valid Values:
Importance: high
Update Mode: read-only
.
.
.
我們想要的是將上面的文件轉換為 ini 文件,如下所示
advertised.host.name=node1
advertised.listeners=null
advertised.port=5500
auto.create.topics.enable=true
.
.
.
注意 - 文字檔案中的每個參數都位於檔案的開頭,沒有空格,而值由預設,
任何建議如何使用 bash 或 awk 或 perl/python 等將text
文件轉換為文件ini
答案1
和awk
:
$ awk -F': ' '/^[^\t ]+:/{key=$1; next}; $1 ~ /^[\t ]+Default/{print key "=" $2}' file
advertised.host.name=node1
advertised.listeners=null
advertised.port=5500
auto.create.topics.enable=true
答案2
嘗試使用下面的方法並且效果很好
awk -F ":" '/advertised|auto.create/{f=$1;print f}/Default/{print $2}' filename| sed "N;s/\n/=/g"
輸出
advertised.host.name=node1
advertised.listeners=null
advertised.port=5500
auto.create.topics.enable=true
Python
#!/usr/bin/python
import re
import itertools
from itertools import islice
final=[]
k=open('filename','r')
for i in k:
if i.startswith('advertised' or 'auto') or i.startswith('auto'):
final.append(i.split(":")[0].strip())
p=list(islice(k,3))
for z in p:
if re.search('Default',z):
final.append(z.split(":")[-1].strip())
for g in range(0, len(final),2):
print "=".join(final[g:g+2])
輸出
advertised.host.name=node1
advertised.listeners=null
advertised.port=5500
auto.create.topics.enable=true