sed 명령을 사용하여 특정 파일의 일부를 읽습니다.

sed 명령을 사용하여 특정 파일의 일부를 읽습니다.

문서 내용.

[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

관련 정보