regex - bash + 如何从长输出中捕获单词

标签 regex language-agnostic

我有以下命令的以下输出

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 一个衬垫),从我的语法中得到更好的建议吗?

最佳答案

使用您显示的样本,请尝试关注 awk代码。由于我没有带 zookeeper 命令,因此我编写了此代码并仅根据您显示的输出对其进行了测试。

zookeeper-shell.sh 19.2.6.4  get /brokers/ids/1010 | 
awk '
/WatchedEvent state/{
  found=1
  next
}
found && match($0,/"PLAINTEXT:\/\/[^:]*/){
  print substr($0,RSTART+13,RLENGTH-13)
}
' 
说明:为以上添加详细说明awk代码。
awk '                                         ##Starting awk program from here.
/WatchedEvent state/{                         ##Checking condition if line contains WatchedEvent state
  found=1                                     ##Then set found to 1 here.
  next                                        ##next will skip all further statements from here.
}
found && match($0,/"PLAINTEXT:\/\/[^:]*/){    ##Checking condition if found is SET then match regex "PLAINTEXT:\/\/[^:]* in match function of awk.
  print substr($0,RSTART+13,RLENGTH-13)       ##Printing sub string of matched regex used in match function above.
}
' 

关于regex - bash + 如何从长输出中捕获单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69034663/

相关文章:

javascript - 如何限制javascript正则表达式中的某些特定字符

c++ - 使用正则表达式将不同的文本插入到另一个?

algorithm - 计算一组点的哈希码的最佳方法是什么?

php - 架构决策 : main site, 论坛、博客

algorithm - 找出这张图片中可能的方 block 数

algorithm - 给定一个日期时间,计算太阳直接在头顶的纬度/经度坐标

php - 需要一个正则表达式来匹配文本中包含/不包含 http ://or www. 或 http ://www. 的 URL

python - 从一行中删除所有逗号字符,除非行以 # 使用 python regex 开头

language-agnostic - 如何更正用户输入(Google的种类“您的意思是?”)

python - 基于正则表达式过滤数据框