修改設定檔中的條目

修改設定檔中的條目

我們有以下設定檔

more /tmp/file

delete.topic.enable=true
broker.id=-1
advertised.listeners=null
.
.
.

我們需要將上面的所有語法轉換如下:

  1. 將“=”分隔符之前的字符更改為大寫字符
  2. 新增KAFKA_到每行的開頭
  3. 替換每個點“.”到“_”下一行,直到“=”分隔符

預期結果範例

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

相關內容