Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Распределить значения Select-String по разным переменным.

Ответить
Настройки темы
PowerShell - Распределить значения Select-String по разным переменным.

Старожил


Сообщения: 226
Благодарности: 20

Профиль | Отправить PM | Цитировать


Изменения
Автор: Uragan66
Дата: 28-11-2019
Описание: исправление кода
Добрый день всем!
Возник вроде бы и банальный вопрос, но не могу придумать как это сделать, точнее знаний не хватает...
При парсинге, да и не только, бывает необходимость значения, вытащенные с помощью Select-String, взять в разные переменные.
К примеру такой блок кода:
Код: Выделить весь код
$b = ($a | Select-String -Pattern '[\S\s]*<title>([^"]+)</title>[\S\s]*var filmSource.*"/([^"]+txt)"[\S\s]*' -AllMatches).Matches| 
ForEach-Object {"$($_.Groups[1].Value)`n$($_.Groups[2].Value)"
Подскажите, пожалуйста, как значения 1 и 2 определить в разные переменные ?

Отправлено: 13:41, 28-11-2019

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6626
Благодарности: 1528

Профиль | Отправить PM | Цитировать


Вот бы получить примерный файл того, что вы парсите, а также что именно нужно из этого файла.

В общем случае, вместо select-string лучше использовать where:

Код: Выделить весь код
$g,$notg = (gc c:\temp\123.txt).where({$_ -match 'g'},'Split')

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Последний раз редактировалось DJ Mogarych, 28-11-2019 в 14:07.

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:58, 28-11-2019 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 226
Благодарности: 20

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: zip pars.zip
(13.7 Kb, 3 просмотров)

DJ Mogarych, примеры то разные могут быть. В переменной $b в данном коде:
Код: Выделить весь код
Сверхъестественное (15 сезон)
/playlist/338619.txt
в продолжении кода эти два значения нужно использовать в разных командах. Вот и хотелось бы взять их в разные переменные.
Пока что выкрутился с помощью рег. выражений:
Код: Выделить весь код
 $t = $b | Foreach {$_ -replace "(.*)`n(.*)","`$1"}
 $r = $b | Foreach {$_ -replace "(.*)`n(.*)","`$2"}
Но это некрасиво, да и неправильно наверное.
Файл для примера прикрепил.

Отправлено: 14:11, 28-11-2019 | #3


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6626
Благодарности: 1528

Профиль | Отправить PM | Цитировать


Ну, если в переменной всего 2 строки, то можно вообще просто:
Код: Выделить весь код
$t = $b[0]
$r = $b[1]
или так:

Код: Выделить весь код
$t,$r = (gc c:\temp\123.txt).where({$_ -notmatch '/'},'Split')

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:25, 28-11-2019 | #4


Старожил


Сообщения: 226
Благодарности: 20

Профиль | Отправить PM | Цитировать


DJ Mogarych, спасибо большое.
К сожалению так не получится. По строкам:
Код: Выделить весь код
$t = $b[0]
$r = $b[1]
я сразу пробовал, но в переменные берутся не строки, а первые символы строк.
А, если применять where, то нужно вывод сохранять во временный файл, что не очень удобно, их в коде и так уже 2.
Можно наверное весь код переделать с Where-Object вместо Select-String, но что-то с ним у меня не получалось взять два нужных значения.

Таким кодом:
Код: Выделить весь код
$t,$r = $k.where({$_ -notmatch '/'},'Split')
получилось отлично
DJ Mogarych, ещё раз большое спасибо за подсказку.

Отправлено: 14:59, 28-11-2019 | #5


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6626
Благодарности: 1528

Профиль | Отправить PM | Цитировать


Uragan66, да, я ошибся - хотел написать во втором примере $b.where, но забыл убрать gc из копипасты.
Впрочем, вы и сами прекрасно догадались.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 16:41, 28-11-2019 | #6


Новый участник


Сообщения: 8
Благодарности: 3

Профиль | Отправить PM | Цитировать


В регулярке группе можно дать имя группе захвата: "(?<name>text)", а потом создать объект с такими же именами.
powershell:
Код: Выделить весь код
$reg = New-Object System.Text.RegularExpressions.Regex '[\S\s]*<title>(?<Title>[^"]+)</title>[\S\s]*var filmSource.*"/(?<FilmSource>[^"]+txt)"[\S\s]*', 'Multiline,IgnoreCase'
$a = gc -Raw ./123.txt
$b = 
if (($a | Out-String) -match $reg ) {
    $Matches.Remove(0)
    New-Object psobject -Property $Matches
    $Matches.Clear()
}
;
$b
выдаст:
Код: Выделить весь код
Title                                                             FilmSource
-----                                                             ----------
Сверхъестественное (15 сезон) смотреть онлайн бесплатно все серии playlist/338619.txt
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:50, 05-12-2019 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Распределить значения Select-String по разным переменным.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - [решено] Select-String $? всегда True Elven Скриптовые языки администрирования Windows 1 09-04-2018 16:33
PowerShell - [решено] выбрать после select только определенные значения поля nokogerra Скриптовые языки администрирования Windows 3 22-12-2016 09:39
CMD/BAT - [решено] Присвоить переменным значения имен файлов в папке kopbetby Скриптовые языки администрирования Windows 5 10-10-2016 14:26
Apache: доступ к разным папкам по разным портам RazdoR Вебмастеру 1 20-09-2013 14:38
PowerShell - [блог] Регулярные выражения – Select-String Xaegr Скриптовые языки администрирования Windows 0 28-12-2009 18:30




 
Переход