希望你正在做。
我需要 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 的一部分。
我想让它更通用,比如选择最后一个等号之后出现的所有内容。
请帮忙。
提前致谢。
你可以在这里使用grep,如果是 GNU,grep请尝试以下操作。只需使用grep-o 和 -P 选项(启用 PCRE 正则表达式)。然后在正则表达式中匹配所有内容,直到最后一次出现=并使用\K丢弃匹配的部分,.*然后它将打印变量中的其余值。
echo "$PM_path" | grep -oP '.*=\K.*'
Run Code Online (Sandbox Code Playgroud)
我想让它更通用,比如选择最后一个等号之后出现的所有内容。
您可以使用:
[[ $PM_path =~ .*=([^/]+) ]] && echo "${BASH_REMATCH[1]}"
R9NEXRERNFVCSS01_PS
Run Code Online (Sandbox Code Playgroud)
.*匹配从头开始最长的可能文本,然后我们匹配=. 最后,我们匹配并捕获剩余的 1 个以上非/字符的字符串,因为([^/]+)我们使用以下命令打印echo "${BASH_REMATCH[1]}"