|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Select-String. Парсинг нескольких значений между наборами символов. |
|
PowerShell - Select-String. Парсинг нескольких значений между наборами символов.
|
Новый участник Сообщения: 35 |
Всем привет!
Уже второй день бьюсь с задачей: есть текстовый файл, из которого необходимо вывести на экран несколько слов/цифр, находящихся между определённым текстом. Кусок файла, пример
... !--PREVINFO_START-->Autodesk AutoCAD Electrical 2015<!--PREVINFO_END--></dfsdferwer 'word-break:break-all'>УH5S SV65 V9У1 WDL3 </td></tr>erwedfsdf td align=left id=2>21T81</td><td align=leftwerewrwer ... !--PREVINFO_START-->Autodesk AutoCAD 2018<!--PREVINFO_END--></dfsdferwer 'word-break:break-all'>YWP8 10NT JHGJ NJJZ </td></tr>erwedfsdf td align=left id=2>T2281</td><td align=leftwerewrwer Такого рода записей может быть несколько из-за нескольких установленных версий Автокада. После работы скрипта результат должен быть таким
Autodesk AutoCAD Electrical 2015 УH5S SV65 V9У1 WDL3 21T81 Autodesk AutoCAD 2018 YWP8 10NT JHGJ NJJZ T2281 Первую строку достаю командой: Но при этом парсится сразу две первые строчки названий программы. Но не могу понять, как задать сразу несколько условий в запросе выше, чтобы парсилось и название, и серийник, и код продукта. Можете подтолкнуть в правильном направлении? |
|
Отправлено: 18:44, 17-07-2020 |
Старожил Сообщения: 193
|
Профиль | Отправить PM | Цитировать |
Отправлено: 20:10, 17-07-2020 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 35
|
Профиль | Отправить PM | Цитировать Цитата Fors1k:
Пример
<!--PREVINFO_START-->Autodesk AutoCAD Electrical 2015 </td> <td align=left id=1>&nbsp; <td align=left id=2>&nbsp; <td align=left id=1 width=15%>Серийный номер: <td align=left id=2> <!--PREVINFO_START-->421-64324142 </td> <td align=left id=1 width=15%>Ключ продукта: <td align=left id=2>21T81 <td align=left id=1>&nbsp; <td align=left id=2>&nbsp; <td align=left id=1 width=15%>РљРѕРґ запроса: Скажите, можно ли в той конструкции, которую вы написали, использовать несколько условий, т.е. обычными словами: Найти все вхождения в файле, располагающиеся между набором символов ("!--PREVINFO_START-->" и "]<!--PREVINFO_END--></") ИЛИ ("'word-break:break-all'>" и "</td></tr>erwedfsdf") ИЛИ ("td align=left id=2>" и "</td><td align=leftwerewrwer") ? |
|
Отправлено: 02:05, 18-07-2020 | #3 |
fascinating rhythm Сообщения: 6626
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 11:43, 18-07-2020 | #4 |
Deadooshka Сообщения: 2517
|
Профиль | Отправить PM | Цитировать Регулярное выражение на всю группу строк с подмасками. Выводим подмаски.
$regexp = "!--PREVINFO_START-->(.*?)<!--PREVINFO_END--></dfsdferwer 'word-break:break-all'>(.*?)</td></tr>erwedfsdf td align=left id=2>(.*?)</td>" Select-String $regexp -InputObject $content -AllMatches | % {$_.Matches | % {$_.Groups[1..3].Captures.Value; "`n"}} |
|
Отправлено: 12:26, 18-07-2020 | #5 |
Старожил Сообщения: 193
|
Профиль | Отправить PM | Цитировать Цитата rango13:
|
|
Отправлено: 15:54, 18-07-2020 | #6 |
Crazy Сообщения: 1218
|
Профиль | Отправить PM | Цитировать Цитата rango13:
Цитата rango13:
и далее, либо воспользоваться встроенным парсером html, либо (что лучше и будет работать, в том числе и в версиях powershell core) воспользоваться внешним модулем PowerHTML #---Эту секцию можно удалить после однократного запуска скрипта от имени админа ------------------ # Установка дополнительного модуля PowerHTML, для независимого парсинга HTML # Может потребоваться ручное подтверждение установки. if (!(get-module -list powerhtml)) { write-verbose "Installing PowerHTML module for the current user..." install-module powerhtml #-scope currentuser } #----------------------------------------------------------------------------------------- |
||
------- Отправлено: 19:32, 18-07-2020 | #7 |
Новый участник Сообщения: 27
|
Профиль | Отправить PM | Цитировать Цитата Fors1k:
Есть ли возможность вывода в одну строку, к примеру вот так: |
|
Отправлено: 15:11, 15-10-2021 | #8 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать |
Отправлено: 16:08, 15-10-2021 | #9 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
PowerShell - Распределить значения Select-String по разным переменным. | Uragan66 | Скриптовые языки администрирования Windows | 6 | 05-12-2019 10:50 | |
PowerShell - HDD/SSD S.M.A.R.T. - парсинг RAW-значений атрибутов. | rango13 | Скриптовые языки администрирования Windows | 3 | 02-07-2018 12:52 | |
PowerShell - [решено] Select-String $? всегда True | Elven | Скриптовые языки администрирования Windows | 1 | 09-04-2018 16:33 | |
[решено] Разница между импульсным и тоновым наборами номеров | Казбек | Хочу все знать | 10 | 02-06-2012 11:30 | |
PowerShell - [блог] Регулярные выражения – Select-String | Xaegr | Скриптовые языки администрирования Windows | 0 | 28-12-2009 18:30 |
|