【问题标题】:How to grep following words from string [closed]如何从字符串中grep以下单词[关闭]
【发布时间】:2020-11-04 17:02:59
【问题描述】:

如何从以下 kubernetes 命令输出中对 PORT(S) 下的“31000”节点端口进行 grep,它可以并且将会改变:

NAME       TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
vault-ui   NodePort   10.96.62.155   <none>        8200:31000/TCP   23m

以及如何在以下输出中 grep ip 地址(在本例中为 192.168.99.213)而不是端口(8443)或 https://,此输出也会根据 ip 发生变化:

Kubernetes master is running at https://192.168.99.213:8443
KubeDNS is running at https://192.168.99.213:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

【问题讨论】:

  • 请在您的问题中添加您的努力,因为它在 SO 上受到强烈鼓励。
  • 有什么不清楚的地方吗?从 2 个输出中 grep 2 个单词? :) @RavinderSingh13
  • 我没有说不清楚,我提到了努力,这是在stackoverflow上鼓励的。

标签: linux awk sed grep output


【解决方案1】:
kubecmd | awk -F[:] 'NR>1 { split($2,arr,"/");print arr[1]}'

对于第一种情况,您可以像上面一样使用 awk。使用 : 作为字段分隔符,然后将 / 上的第二个分隔片段进一步拆分为数组 arr 打印此数组的第一个元素

kubecmd | sed -En 's/(^.*Kubernetes master.*https:\/\/)(.*)(:.*$)/\2/p'

对于第二种情况,如上使用 sed。将文本分成三部分并打印第二部分

【讨论】:

  • 嗨!第一个有效,但第二个也是命令,所以我需要“kubecmd | sed”,就像第一个一样,我发布的输出是输出的第一行,我只需要从该字符串中 grep ip跨度>
  • 是的,只需将命令输出通过管道传输到 sed 并删除
  • 现在@Raman Sailopal 上方有更多说明
  • 去掉 ^ 试试看,所以 s/(Kubernetes master...
  • 我删除它并运行:kubectl cluster-info | sed -En 's/(Kubernetes master is running at https:\/\/)(.*)(:.*$)/\2/p' 没有返回任何东西
猜你喜欢
  • 2020-04-27
  • 1970-01-01
  • 1970-01-01
  • 2023-02-13
  • 2021-07-04
  • 1970-01-01
  • 2019-09-09
  • 1970-01-01
  • 2012-10-30
相关资源
最近更新 更多