我們有以下設定檔
more /tmp/file
delete.topic.enable=true
broker.id=-1
advertised.listeners=null
.
.
.
我們需要將上面的所有語法轉換如下:
- 將“=”分隔符之前的字符更改為大寫字符
- 新增
KAFKA_
到每行的開頭 - 替換每個點“.”到“_”下一行,直到“=”分隔符
預期結果範例
KAFKA_DELETE_TOPIC_ENABLE=true
KAFKA_BROKER_ID=-1
KAFKA_ADVERTISED_LISTENERS=null
.
.
.
sed對此改變有什麼建議嗎?
我們試試這個,
KAFKA_
但這也會在「=」分隔符號之後轉換承租人(不應該是這樣),我們也不知道如何在開頭添加
sed 's/[a-z]/\U&/g' /tmp/file | sed s'/\./_/g'
DELETE_TOPIC_ENABLE=TRUE
BROKER_ID=-1
ADVERTISED_LISTENERS=NULL
.
.
答案1
使用 GNU awk 將第三個參數配對到 match():
$ awk 'match($0,/([^=]+)(.*)/,a){ gsub(/\./,"_",a[1]); print "KAFKA_" toupper(a[1]) a[2]}' file
KAFKA_DELETE_TOPIC_ENABLE=true
KAFKA_BROKER_ID=-1
KAFKA_ADVERTISED_LISTENERS=null
對於任何 awk:
$ awk 'match($0,/[^=]+/){ tag=substr($0,1,RLENGTH); gsub(/\./,"_",tag); print "KAFKA_" toupper(tag) substr($0,1+RLENGTH)}' file
KAFKA_DELETE_TOPIC_ENABLE=true
KAFKA_BROKER_ID=-1
KAFKA_ADVERTISED_LISTENERS=null
答案2
awk -F "=" 'OFS="="{gsub(/\./,"_",$1);print "KAFKA_"toupper($1)"="$2}' FILE
輸出
KAFKA_DELETE_TOPIC_ENABLE=true
KAFKA_BROKER_ID=-1
KAFKA_ADVERTISED_LISTENERS=nul1
Python
#!/usr/bin/python
import re
k=open('file1','r')
for i in k:
y=i.split('=')
z=y[0].upper().replace(".","_")+"="+y[1]
print "KAFKA_{0}".format(z).strip()
輸出
KAFKA_DELETE_TOPIC_ENABLE=true
KAFKA_BROKER_ID=-1
KAFKA_ADVERTISED_LISTENERS=null
答案3
perl
單行:
perl -pe 's/^([^=]+)/KAFKA_\U$1/; s/\.(?=[^=]*=)/_/g' file