我想在网络交换机配置的行中找到一个用引号引起来的密码,但是它不起作用。有人可以帮忙吗?例如:我在配置中有一行:
set snmp v3 usm local-engine user Admin authentication-sha authentication-key "$aBCd./!Test"
我这样写了一个Regex语句,但是它不起作用。
^set\s\snmp\sv3\s\usm\slocal-engine\suser\sAdmin\sAuthentication-sha\sauthentication-key\s[0-9A-Za-z$./!.*+]
^set\s\snmp\sv3\s\usm\slocal-engine\suser\sAdmin\sAuthentication-sha\sauthentication-key\s[0-9A-Za-z$./!.*+]
什么都不显示
答案 0 :(得分:0)
在您的模式中,转义\u
,\s
和一些多余的空格时会出现一些错误。
您可以使用+
重复character class 1次以上并使用捕获组
要同时匹配Authentication
,可以不区分大小写,使用大写字符或使用[aA]
来匹配两者。
^set\ssnmp\sv3\susm\slocal-engine\suser\sAdmin\sAuthentication-sha\sauthentication-key\s"([0-9A-Za-z$./!.*+]+)"
如果双引号应作为结果的一部分,则可以将其添加到捕获组中。
("[0-9A-Za-z$./!.*+]+")
例如
$Str = 'set snmp v3 usm local-engine user Admin authentication-sha authentication-key "$aBCd./!Test" '
$Pattern = '^set\ssnmp\sv3\susm\slocal-engine\suser\sAdmin\sAuthentication-sha\sauthentication-key\s("[0-9A-Za-z$./!.*+]+")'
$match = $Str -match $Pattern
$Matches[1] # First capturing group
输出
"$aBCd./!Test"
答案 1 :(得分:0)
这将匹配双引号之间的所有内容,但假定只有一对这样的对。捕获的组位于$Matches
自动变量@索引1中。
$InStuff = 'set snmp v3 usm local-engine user Admin authentication-sha authentication-key "$aBCd./!Test"'
$Null = $InStuff -match '.+"(.+)"'
$Matches[1]
output = $aBCd./!Test