Извлечь несколько строк между двумя переменными - PullRequest
0 голосов
/ 16 мая 2019

Я застрял в коде, мое требование состоит в том, чтобы получить строки между двумя строками (переменными), пожалуйста, предложите шаблон регулярных выражений

Введите:

Device Name: test
Status: Completed
Results:
[PUSH_TERMLET] Action completed successfully...
Pushing configuration file 'PUSH_TERMLET' for IDX 60504 with mechanism SSH
****** Enable Mode Results ******
sh run | sec ip access-list standard customer_internal
ip access-list standard customer_internal
 permit 204.79.49.116
 permit 159.12.130.0 0.0.0.31
 permit 10.108.30.0 0.0.0.255
 permit 10.108.141.0 0.0.0.127
 permit 10.108.172.0 0.0.0.255
 permit 10.108.160.0 0.0.0.31
test#

Выход:

 permit 204.79.49.116
 permit 159.12.130.0 0.0.0.31
 permit 10.108.30.0 0.0.0.255
 permit 10.108.141.0 0.0.0.127
 permit 10.108.172.0 0.0.0.255
 permit 10.108.160.0 0.0.0.31

Вот код, который я пытаюсь

$content = Get-Content -Path "TestACL.txt"

$device_list = $content | Select-String -Pattern "device name" -AllMatches

foreach($temp in $device_list) {
    $temp.sp
    $pattern = "(?<=$temp|permit)(.*)"
    $content | Select-String -Pattern $pattern
}

Кроме того, я пробовал и другие шаблоны, ни один из них не работал для меня.

1 Ответ

0 голосов
/ 16 мая 2019

Ваше регулярное выражение было довольно близко.Давайте рассмотрим эту опцию.

$Content = (Get-Content "C:\temp\TestACL.txt") -join ' '
$variable = "test#"
$Output = ($Content  | Select-String -Pattern "(?:permit )(.*)(?= $($variable))").Matches.Value

(?:permit ) найдет слово permit, включая пробел, и ?: включит его в совпадение.

(?= test#)Введите слово test#, включая пробел, и ?= совпадет, но исключит его из результатов после основного выражения.

(.*) будет захватывать что-либо между первым и последним критериями

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