文書の内容。
[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",]
ただし、sedssl.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