【发布时间】:2021-11-01 04:33:09
【问题描述】:
我有以下命令的以下输出
zookeeper-shell.sh 19.2.6.4 get /brokers/ids/1010
输出是
Connecting to 19.2.6.4
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
{"listener_security_protocol_map":{"PLAINTEXT":"PLAINTEXT"},"endpoints":["PLAINTEXT://kafka1.lulu.com:6667"],"rack":"/default-rack","jmx_port":9997,"port":6667,"host":"kafka1.lulu.com","version":4,"timestamp":"1630507307906"}
主要目标是从上面的输出中捕获机器名称kafka1
所以我成功地执行了以下长命令语法
zookeeper-shell.sh 119.2.6.4 get /brokers/ids/1010 | sed s'/\/\// /g' | sed s'/:/ /g' | sed s'/,/ /g' | sed s'/"/ /g' | sed s'/\./ /g'| awk '{for (i=1;i<=NF;i++) print $i}' | grep -i kafka | sort | uniq
结果是:(如预期的结果)
kafka1
情况是我觉得我的方法很糟糕,它太长而且不那么优雅
我们能否得到建议(使用 awk/sed/perl 一个衬里),这比我的语法好得多?
【问题讨论】:
-
您不需要多个
sed命令。sed -e 's/x/y/g' -e 's/a/b/g' ... -
还有
sed -e 's/[:,."]/ /g'