Изменить записи в файле конфигурации

Изменить записи в файле конфигурации

У нас есть следующий файл конфигурации

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():

$ 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

Связанный контент