從以下文本中,我希望提取以下兩個字串:
ip-10-x-x-x.eu-west-2.compute.interna
和
topology.kubernetes.io/zone=eu-west-2a
完整的斑點:
ip-10-x-x-x.eu-west-2.compute.internal Ready <none> 18d v1.20.4-eks-1-20-1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/os=linux,node.app/name=all,topology.kubernetes.io/region=eu-west-2,topology.kubernetes.io/zone=eu-west-2a
正則運算式與 Grep PCRE 被用于提取字串。
以下正則運算式適用于https://regex101.com/
(((^ip.*?)(?=(\s)))(?:.*?)((?<=\,)(topology\.kubernetes\.io\/zone.*?)(?=(\s|$))))
但是當使用 Grep 在 Bash v4.2 上運行時,它會拉回完整的 blob,而不是正則運算式組,如下所示:
echo "ip-10-x-x-x.eu-west-2.compute.internal Ready <none> 18d v1.20.4-eks-1-20-1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/os=linux,node.app/name=all,topology.kubernetes.io/region=eu-west-2,topology.kubernetes.io/zone=eu-west-2a" | grep -oP "(((^ip.*?)(?=(\s)))(?:.*?)((?<=\,)(topology\.kubernetes\.io\/zone.*?)(?=(\s|$))))"
我在這里缺少什么?
uj5u.com熱心網友回復:
正如 Barmer 評論的那樣,grep不涉及捕獲組。您需要修改正則運算式以使用 grep:
echo "ip-10-x-x-x.eu-west-2.compute.internal Ready <none> 18d v1.20.4-eks-1-20-1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/os=linux,node.app/name=all,topology.kubernetes.io/region=eu-west-2,topology.kubernetes.io/zone=eu-west-2a" | grep -oP "^ip\S |(?<=\,)topology\.kubernetes\.io\/zone\S*(?=(?:\s|$))"
輸出:
ip-10-x-x-x.eu-west-2.compute.internal
topology.kubernetes.io/zone=eu-west-2a
如果您想按原樣使用正則運算式,請嘗試ripgrep:
echo "ip-10-x-x-x.eu-west-2.compute.internal Ready <none> 18d v1.20.4-eks-1-20-1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/os=linux,node.app/name=all,topology.kubernetes.io/region=eu-west-2,topology.kubernetes.io/zone=eu-west-2a" | rg --pcre2 "(((^ip.*?)(?=(\s)))(?:.*?)((?<=\,)(topology\.kubernetes\.io\/zone.*?)(?=(\s|$))))" -r '$2'$'\n''$5'
這將產生相同的結果。
uj5u.com熱心網友回復:
如果你沒問題awk,請嘗試以下awk程式。
awk '
match($0,/^ip\S /){
print substr($0,RSTART,RLENGTH)
match($0,/,topology\.kubernetes\.io\/zone\S*/)
print substr($0,RSTART 1,RLENGTH-1)
}
' Input_file
解釋:簡單的解釋是,使用匹配match函式然后列印其匹配值。然后再次使用 1匹配正則運算式以通過 OP 獲得第二個提到的值,然后僅通過 substr 函式列印所需的輸出。awk^ip\S match,topology\.kubernetes\.io\/zone\S*
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/336627.html
