2015-07-28 4 views
-1

У меня есть текстовый файл с рядом строк. Я хотел бы искать каждую строку отдельно для определенного шаблона и, если этот шаблон найден, выводит подстроку в определенном месте относительно того, где был найден шаблон.Выпрямить подстроки, где совпадение найдено

Т.е. если строка содержит шаблон в позиции 20, я хотел бы вывести подстроку, которая начинается в позиции 25 в той же строке и длится пять символов.

Следующий выходной код будет каждая строка, которая содержит шаблон:

select-string -path C:\Scripts\trimatrima\DEBUG.txt -pattern $PATTERN 

Куда я иду отсюда?

+0

_> где я иду отсюда? _ https://regex101.com/ –

ответ

0

Вы можете использовать $Matches автоматическую переменную:

Последний матч хранится в $Matches[0], но вы также можете использовать именованные группы захвата, как это:

"test","fest","blah" |ForEach-Object { 
    if($_ -match "^[bf](?<groupName>es|la).$"){ 
     $Matches["groupName"] 
    } 
} 

возвращается es (от «фест») и la (from "blah")

0

Пара вариантов.

Сохраняя Select-String, вы хотите использовать .line свойство, чтобы получить ваши подстроки:

select-string -path C:\Scripts\trimatrima\DEBUG.txt -pattern $PATTERN | 
foreach { $_.line.Substring(19,5) } 

Для больших файлов, Get-Content с -ReadCount и -match может быть быстрее:

Get-Content C:\Scripts\trimatrima\DEBUG.txt-ReadCount 1000 | 
foreach { 
    $_ -match $pattern | 
    foreach { $_.substring(19,5) } 
    } 
+1

Я думаю, что было бы полезно отметить положительный внешний вид, так как со вторым методом он мог бы просто сделать что-то вроде 'GC $ fil e -readcount 1000 | ForEach {$ _ -replace "(? <= $ Pattern). {5} (. {5})", '$ 1'} '(возможно, даже без ForEach? Я не уверен, вы бы знали лучше, чем я) – TheMadTechnician

+0

Вам не нужно будет выглядеть так. Просто добавьте начало привязки строки и подстановочные символы первых 20 символов. – mjolinor

+0

Из его оригинального сообщения у меня создалось впечатление, что строка может быть расположена в любом месте строки, и он хочет подстроку 5 символов после шаблона, где бы ни был найден шаблон. Возможно, я неправильно понял. – TheMadTechnician

Смежные вопросы