設定ファイルのエントリを変更する

設定ファイルのエントリを変更する

次の設定ファイルがあります

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
.
.
.

この変更に関して何か提案はありますか?

これを試してみます、

しかし、これはまた、“=”セパレーターの後のチャーターを変換します(そうあるべきではありません)。また、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() の 3 番目の引数は次のようになります。

$ 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

パイソン

#!/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

関連情報