다음 구성 파일이 있습니다
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
.
.
.
이를 변경하기 위한 제안 사항이 있나요?
이것을 시도해 봅시다.
KAFKA_
그러나 이는 또한 "=" 구분 기호 뒤에 있는 테넌트를 변환하며(그렇지 않아야 함) 처음에 추가하는 방법도 모릅니다.
sed 's/[a-z]/\U&/g' /tmp/file | sed s'/\./_/g'
DELETE_TOPIC_ENABLE=TRUE
BROKER_ID=-1
ADVERTISED_LISTENERS=NULL
.
.
답변1
match()에 대한 세 번째 인수를 일치시키려면 GNU awk를 사용하십시오.
$ 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 '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