Лучший отвечающий
Получение определённых данных из файла

Вопрос
-
Добрый день.
Подскажите пож-то, можно-ли с помощью powershell, вытащить из текстового файла данные между определёнными строками, которые имеют название Т.е. указать строку ниже которой нужно считывать данные и затем строку до которой это делать?
- Изменено Cloomger_Tasher 27 апреля 2022 г. 4:40
27 апреля 2022 г. 4:40
Ответы
-
$FirstString = 'Name' $LastString = 'fi-fi' $FilePath = 'C:\tmp\11.txt' if( (Get-Content $FilePath -Raw) -match "(?s)$($FirstString)(.*?)$($LastString)" ) { $Matches[1] }
Грамотная постановка вопроса - уже 50% решения.
SCCM User Group Russia в Telegram- Предложено в качестве ответа Vector BCOModerator 27 апреля 2022 г. 13:02
- Помечено в качестве ответа Vector BCOModerator 27 апреля 2022 г. 13:02
27 апреля 2022 г. 11:50
Все ответы
-
День добрый.
можно:
- воспользоваться регулярными выражениями,
- в цикле перебирать строки
- найти индекс начала и конца нужных строк и выбрать только их
Можете привести пример файла и что из него надо достать? Желательно приложить сам файл - аттачем
Грамотная постановка вопроса - уже 50% решения.
SCCM User Group Russia в Telegram27 апреля 2022 г. 10:50 -
$FirstString = 'Name' $LastString = 'fi-fi' $FilePath = 'C:\tmp\11.txt' if( (Get-Content $FilePath -Raw) -match "(?s)$($FirstString)(.*?)$($LastString)" ) { $Matches[1] }
Грамотная постановка вопроса - уже 50% решения.
SCCM User Group Russia в Telegram- Предложено в качестве ответа Vector BCOModerator 27 апреля 2022 г. 13:02
- Помечено в качестве ответа Vector BCOModerator 27 апреля 2022 г. 13:02
27 апреля 2022 г. 11:50 -
День добрый.
можно:
- воспользоваться регулярными выражениями,
- в цикле перебирать строки
- найти индекс начала и конца нужных строк и выбрать только их
Можете привести пример файла и что из него надо достать? Желательно приложить сам файл - аттачем
Грамотная постановка вопроса - уже 50% решения.
SCCM User Group Russia в TelegramНу вот для примера файл, в котором во такие данные и из которого мне необходимо вытащить данные, которые находятся между этих двух строк:
Applied Group Policy Objects и The following GPOs were not applied because they were filtered out
Domain Type: Windows 2008 or later
Applied Group Policy Objects
-----------------------------
Guest_1
EventNotificat
PSetting
NTLM
CA Policy GP
Default Domain Policy
GP Refresh
CA Untrusted Certs
Local Group
The following GPOs were not applied because they were filtered out
-------------------------------------------------------------------
RDP Session 5 min Limit
Filtering: Denied (Security)
Я указал эти строки в скрипте, но получил ошибку:
parsing "(?s)*Applied Group Policy Objects*(.*?)*The following GPOs were not applied because they were filtered out*" - Quantifier {x,y} following nothing.
At line:4 char:68
+ ... $FilePath -Raw) -match "(?s)$($FirstString)(.*?)$($LastString)" ) { $ ...
+ ~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (:) [], ArgumentException
+ FullyQualifiedErrorId : System.ArgumentException- Изменено Cloomger_Tasher 28 апреля 2022 г. 3:38
28 апреля 2022 г. 3:35 -
Привет, Клумгер_Ташер,
Вы можете выбрать, с какой строки начать захват и сколько строк захватить с этой точки, но, насколько мне известно, подсчет строк снизу файла невозможен.
Простой и экономичный подход, подходящий для обработки больших входных файлов, заключается в объединении Get-Content с Select-Object. С помощью этих команд вы можете указать начальную линию и количество линий для захвата:
Get-Content user.log | Выбрать-Объект -Пропустить 2 -Первый 1
-Skip 2 указывает Select-Object пропустить первые 2 строки ввода, выводимые Get-Content.
Таким образом, именно 3-я строка обрабатывается и выводится первой с помощью Select-Object, и
-First 1 останавливает обработку сразу после этого, так что остальную часть файла не нужно читать.
Надеюсь, это ответит на ваш вопрос.
Спасибо.
--Если ответ полезен, проголосуйте за него и примите как ответ--28 апреля 2022 г. 8:03