Используйте Powershell и Regex, чтобы соответствовать только первому - PullRequest
0 голосов
/ 27 февраля 2019

в моем конфиге устройства он имеет конфигурацию show running-config и start-up, которые оба настроены со строкой vty, такой как

show running-config

line vty 0 4
 access-class 20 in
 password 7 373737
 login authentication test
 exec-timeout 10
 transport input ssh
line vty 5 15
 access-class 20 in
 password 7 373737
 login authentication test
 exec-timeout 10

start-up config
line vty 0 4
 access-class 20 in
 password 7 373737
 login authentication test
 exec-timeout 10
 transport input ssh
line vty 5 15
 access-class 20 in
 password 7 373737
 login authentication test
 exec-timeout 10
 transport input ssh

Я написал скрипт Powershell и регулярное выражение ниже, и когда язапускал скрипт, который выводил четыре раза.Я хочу сопоставить только первое совпадение и вывести только результат из рабочей конфигурации, но не знаю как.Может кто-нибудь помочь PLS?

$Line_VTY = Select-String -path c:\test\config.txt -Pattern "\sline\svty\s\d{1}\s\d{1,2} -Context 0,6

write-host $line_vty

и вывод показывает

line vty 0 4
 access-class 20 in
 password 7 373737
 login authentication test
 exec-timeout 10
 transport input ssh
line vty 5 15
 access-class 20 in
 password 7 373737
 login authentication test
 exec-timeout 10
 transport input ssh
line vty 0 4
 access-class 20 in
 password 7 373737
 login authentication test
 exec-timeout 10
 transport input ssh
line vty 5 15
 access-class 20 in
 password 7 373737
 login authentication test
 exec-timeout 10
 transport input ssh

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Select-String предлагает переключатель -List, который находит только 1 совпадение для каждого входного файла:

Select-String -List -Path c:\test\config.txt -Pattern '\sline\svty\s\d{1}\s\d{1,2}' -Context 0,5

Обратите внимание, что вы получитеодин выходной объект с информацией о совпадении :

  • Свойство .Line содержит соответствующую строку.

  • The * 1021Свойство * содержит дополнительные 5 строк контекста в свойстве .PostContext.

Поэтому, если вы хотите вывести все 6 строк по отдельности , как строки, используйте следующее:

Select-String -List -Path c:\test\config.txt -Pattern '\sline\svty\s\d{1}\s\d{1,2}' -Context 0,5 |
  ForEach-Object { $_.Line; $_.Context.PostContext }
0 голосов
/ 27 февраля 2019

Выберите строку, которая будет соответствовать всему, чтобы получить первую, перенаправьте ее на select-object

select-object -First 1

что-то вроде

Select-String -path ./config.txt -Pattern "\sline\svty\s\d{1}\s\d{1,2}" | select-object -First 1

или сЯ получаю контекст

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...