문서 내용.
[kafka_properties]
listeners=PLAINTEXT://:KAFKA_CLIENT_PORT
default.replication.factor=2
ssl.client.auth=required
ssl.cipher.suites=["TLS_DHE_RSA_WITH_AES_256_GCM_SHA384",
"TLS_DHE_RSA_WITH_AES_128_GCM_SHA256",
"TLS_DHE_RSA_WITH_AES_256_CBC_SHA256",
"TLS_DHE_RSA_WITH_AES_128_CBC_SHA256",]
ssl.enabled.protocols=TLSV1.2
ssl.secure.random.implem=SHA1PRNG
security.inter.broker.protocol=PLAINTEXT
security.protocol=SSL
ssl.endpoint.identification.algorithm=https
[kafka_ports]
KAFKA_CLIENT_PORT=9082
[zookeeper_properties]
clientPort=ZK_CLIENT_PORT
syncLimit=2
initLimit=5
tickTime=2000
autopurge.snapRetainCount=3
autopurge.purgeInterval=1
admin.serverPort=ZK_SERVER_ADMIN_PORT
[kafka_properties]
예를 들어 다음을 사용하여 각 섹션의 값을 읽으려고 합니다 [kafka_ports]
.
cat file.txt | sed -n '0,/kafka_properties/d;/\[/,$d;/^$/d;p'
이 값을 다른 파일에 씁니다. 매개변수를 추가하지 않으면 정상적으로 작동합니다.
ssl.cipher.suites=["TLS_DHE_RSA_WITH_AES_256_GCM_SHA384",
"TLS_DHE_RSA_WITH_AES_128_GCM_SHA256",
"TLS_DHE_RSA_WITH_AES_256_CBC_SHA256",
"TLS_DHE_RSA_WITH_AES_128_CBC_SHA256",]
그러나 sed ssl.cipher.suites=
에 매개변수를 추가하면 file.txt
예상대로 작동하지 않았습니다. 내가 어디서 잘못됐나요?
답변1
[
줄의 시작 부분에서만 일치합니다 ^
.
sed -n '0,/kafka_properties/d;/^\[/,$d;/^$/d;p' file.txt
답변2
섹션 이름을 모르고 각 섹션을 다른 파일에 쓰는 일반적인 경우에는 다음과 같이 할 수 있습니다.
awk '/^\[/{n=$1;gsub(/[][]/,"",n)}{print >> n".txt"}' file
그러면 예제에서 다음 파일이 생성됩니다.
kafka_ports.txt kakfa_properties.txt zookeeper_properties.txt
설명하다
/^\[/{n=$1;gsub(/[][]/,"",n)}
: 이 줄이 로 시작하는 경우[
첫 번째 필드를 변수로 저장 하고 해당 필드에서 또는n
모두를 제거합니다 .[
]
print >> n".txt"
: 현재 줄을 파일에 추가합니다n.txt
. 여기서 은n
섹션의 이름입니다.
이는 섹션 이름에 공백이 없다고 가정합니다. 그렇다면 다음을 시도해 보세요.
awk '/^\[/{n=$0;gsub(/[][]/,"",n); gsub(/ /,"_",n)}{print >> n".txt"}' file