如何用awk/sed/perl一行命令从zookeeper-shell输出提取kafka主机名
提取kafka broker机器名的简洁单行命令方案
你原本的实现通过多轮sed替换特殊字符再拆分提取,逻辑可行但管道冗余,可通过以下单行命令实现同等效果:
方案1:单awk实现(优先推荐)
直接指定多分隔符完成字段拆分,匹配目标字段输出即可:
zookeeper-shell.sh 119.2.6.4 get /brokers/ids/1010 | awk -F '//|[:,"./ ]' '{for(i=1;i<=NF;i++) if($i ~ /kafka/i) print $i}' | sort -u
- 用
-F参数一次性将//、:、,、"、.、/、空格都设为字段分隔符,省略多轮sed替换步骤 - 遍历所有字段匹配含
kafka的内容输出,最后sort -u完成去重
方案2:sed+grep实现
用sed批量替换特殊字符为换行,直接匹配目标内容:
zookeeper-shell.sh 119.2.6.4 get /brokers/ids/1010 | sed 's/[":,/ .]/\n/g' | grep -i '^kafka' | sort -u
- 单轮sed将所有需要拆分的特殊字符统一替换为换行符
- grep直接过滤以kafka开头的行,忽略大小写
方案3:perl最短实现
通过正则全局匹配目标格式的主机名:
zookeeper-shell.sh 119.2.6.4 get /brokers/ids/1010 | perl -nle 'print $& while /kafka[a-z0-9]*/ig' | sort -u
- 适合主机名格式为
kafka+数字/字母的固定场景,无需拆分字段直接正则匹配提取
内容的提问来源于stack exchange,提问作者Judy
相关产品推荐
相关产品推荐

