shell脚本中模式匹配的正则表达式并提取匹配部分

Cha*_*ngh 5 bash shell grep

希望你正在做。

我需要 shell 脚本中正则表达式的帮助。

输入是:

PM_path='SubNetwork=IMS,SubNetwork=IMS,MeContext=R9NEXRERNFVCSS01_PS'**PM_path='子网络=IMS,子网络=IMS,MeContext=R9NEXRERNFVCSS01_PS'

我想要的输出为:

R9NEXRERNFVCSS01_PS是最后一个等号之后的所有内容。

现在我已经实现它如下:

if [[ $PM_path =~ MeContext=([a-zA-Z0-9_]+) ]]; then  
      NODE_NAME=${BASH_REMATCH[1]}
 echo "the value is matched";
Run Code Online (Sandbox Code Playgroud)

所以在这里我检查了 MeContext,这是 PM_path 的一部分。

我想让它更通用,比如选择最后一个等号之后出现的所有内容。

请帮忙。

提前致谢。

Rav*_*h13 5

你可以在这里使用grep,如果是 GNU,grep请尝试以下操作。只需使用grep-o 和 -P 选项(启用 PCRE 正则表达式)。然后在正则表达式中匹配所有内容,直到最后一次出现=并使用\K丢弃匹配的部分,.*然后它将打印变量中的其余值。

echo "$PM_path" | grep -oP '.*=\K.*'
Run Code Online (Sandbox Code Playgroud)


anu*_*ava 4

我想让它更通用,比如选择最后一个等号之后出现的所有内容。

您可以使用:

[[ $PM_path =~ .*=([^/]+) ]] && echo "${BASH_REMATCH[1]}"
R9NEXRERNFVCSS01_PS
Run Code Online (Sandbox Code Playgroud)

.*匹配从头开始最长的可能文本,然后我们匹配=. 最后,我们匹配并捕获剩余的 1 个以上非/字符的字符串,因为([^/]+)我们使用以下命令打印echo "${BASH_REMATCH[1]}"