从 grep 获取特定输出
Get specific output from grep
我正在尝试使用 grep 获取特定输出,但我无法这样做。
这是我的 grep 命令:
crictl inspect 47aaecb541688accf37840108cc0d19b39b84f8337740edf2ca7e5e81a24328e | grep "io.kubernetes.pod.namespace"
以上命令的输出为"io.kubernetes.pod.namespace": "kube-system",
我什至试过了
crictl inspect 47aaecb541688accf37840108cc0d19b39b84f8337740edf2ca7e5e81a24328e | grep -Po '(?<="io.kubernetes.pod.namespace": ").*'
但我得到的输出是 kube-system",
我只想要值,即 kube-system
如何修改我的 grep 命令。
感谢您的帮助
使用 grep
我们只需要对 grep -P
命令做一点小改动。您的命令是:
$ echo '"io.kubernetes.pod.namespace": "kube-system",' | grep -Po '(?<="io.kubernetes.pod.namespace": ").*'
kube-system",
我们只需要用 [^"]*
替换 .*
(它匹配行尾的所有内容)匹配所有内容直到但不包括第一个 "
:
$ echo '"io.kubernetes.pod.namespace": "kube-system",' | grep -Po '(?<="io.kubernetes.pod.namespace": ")[^"]*'
kube-system
或者,使用您的 crictl
命令:
crictl inspect 47aaecb541688accf37840108cc0d19b39b84f8337740edf2ca7e5e81a24328e | grep -Po '(?<="io.kubernetes.pod.namespace": ")[^"]*'
使用 sed
$ echo '"io.kubernetes.pod.namespace": "kube-system",' | sed -n '/"io.kubernetes.pod.namespace"/{s/.*": "//; s/".*//p}'
kube-system
工作原理:
-n
告诉 sed 不要打印,除非我们明确要求它。
/"io.kubernetes.pod.namespace"/{...}
仅选择那些包含 "io.kubernetes.pod.namespace"
的行并在其上执行大括号中的命令。
s/.*": "//
删除从行首到最后一次出现 ": "
的所有内容。
s/".*//p
删除从第一个剩余的 "
到行尾的所有内容并打印结果。
我正在尝试使用 grep 获取特定输出,但我无法这样做。 这是我的 grep 命令:
crictl inspect 47aaecb541688accf37840108cc0d19b39b84f8337740edf2ca7e5e81a24328e | grep "io.kubernetes.pod.namespace"
以上命令的输出为"io.kubernetes.pod.namespace": "kube-system",
我什至试过了
crictl inspect 47aaecb541688accf37840108cc0d19b39b84f8337740edf2ca7e5e81a24328e | grep -Po '(?<="io.kubernetes.pod.namespace": ").*'
但我得到的输出是 kube-system",
我只想要值,即 kube-system
如何修改我的 grep 命令。 感谢您的帮助
使用 grep
我们只需要对 grep -P
命令做一点小改动。您的命令是:
$ echo '"io.kubernetes.pod.namespace": "kube-system",' | grep -Po '(?<="io.kubernetes.pod.namespace": ").*'
kube-system",
我们只需要用 [^"]*
替换 .*
(它匹配行尾的所有内容)匹配所有内容直到但不包括第一个 "
:
$ echo '"io.kubernetes.pod.namespace": "kube-system",' | grep -Po '(?<="io.kubernetes.pod.namespace": ")[^"]*'
kube-system
或者,使用您的 crictl
命令:
crictl inspect 47aaecb541688accf37840108cc0d19b39b84f8337740edf2ca7e5e81a24328e | grep -Po '(?<="io.kubernetes.pod.namespace": ")[^"]*'
使用 sed
$ echo '"io.kubernetes.pod.namespace": "kube-system",' | sed -n '/"io.kubernetes.pod.namespace"/{s/.*": "//; s/".*//p}'
kube-system
工作原理:
-n
告诉 sed 不要打印,除非我们明确要求它。/"io.kubernetes.pod.namespace"/{...}
仅选择那些包含"io.kubernetes.pod.namespace"
的行并在其上执行大括号中的命令。s/.*": "//
删除从行首到最后一次出现": "
的所有内容。s/".*//p
删除从第一个剩余的"
到行尾的所有内容并打印结果。