Wir haben die folgende Konfigurationsdatei
more /tmp/file
delete.topic.enable=true
broker.id=-1
advertised.listeners=null
.
.
.
Wir müssen die gesamte Syntax oben wie folgt konvertieren:
- Ändern Sie die Zeichen bis zum Trennzeichen „=“ in Großbuchstaben
- Fügen Sie
KAFKA_
am Anfang jeder Zeile hinzu - Ersetzt jeden Punkt „.“ durch den Unterstrich „_“ bis zum „=“-Trennzeichen
Beispiel für erwartete Ergebnisse
KAFKA_DELETE_TOPIC_ENABLE=true
KAFKA_BROKER_ID=-1
KAFKA_ADVERTISED_LISTENERS=null
.
.
.
Irgendwelche Sed-Vorschläge für diese Änderung?
Wir versuchen dies,
aber dies konvertiert auch die Charterer nach dem „=“-Trennzeichen (nicht wie es sein sollte), und wir sind uns auch nicht sicher, wie wir das KAFKA_
am Anfang hinzufügen können
sed 's/[a-z]/\U&/g' /tmp/file | sed s'/\./_/g'
DELETE_TOPIC_ENABLE=TRUE
BROKER_ID=-1
ADVERTISED_LISTENERS=NULL
.
.
Antwort1
Mit GNU awk für das 3. Argument für 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
Mit jedem 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
Antwort2
awk -F "=" 'OFS="="{gsub(/\./,"_",$1);print "KAFKA_"toupper($1)"="$2}' FILE
AUSGABE
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()
Ausgabe
KAFKA_DELETE_TOPIC_ENABLE=true
KAFKA_BROKER_ID=-1
KAFKA_ADVERTISED_LISTENERS=null
Antwort3
perl
Einzeiler:
perl -pe 's/^([^=]+)/KAFKA_\U$1/; s/\.(?=[^=]*=)/_/g' file