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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удаления строки ниже найденого текста.

Ответить
Настройки темы
CMD/BAT - [решено] Удаления строки ниже найденого текста.

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


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

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


Друзья, всем привет. Обычно по bat много инфы и все мои задачи давно уже решались и я их с легкостью находил, но сейчас не смог найти решение. Помогите пожалуйста.

Есть текстовый файл вида.

произвольный текст
произвольный текст
произвольный текст txt1 произвольный текст
произвольный текст
произвольный текст
произвольный текст txt1 произвольный текст
произвольный текст
произвольный текст txt1 произвольный текст
произвольный текст
произвольный текст
произвольный текст

Где:
произвольный текст - это различный текст, не повторяющийся текст.
text1 - это текст который не изменяется.

Задача, найти в текстовом файле текст "txt1" удалить строчку где находиться этот текст и строчку ниже.

Отправлено: 10:45, 15-08-2019

 

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

fascinating rhythm


Moderator


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

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


Я пытался "захватить следующую строку" с помощью Regex типа
Код: Выделить весь код
".*txt1.*\n.*"
или
Код: Выделить весь код
".*txt1.*\r.*"
, но ничего не вышло.
Также, сначала убивал строку с паттерном, а потом пытался захватить пустую строку и следующую за ней:
Код: Выделить весь код
"\s+\n.*"
, но тоже не сработало.

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


Отправлено: 21:44, 23-08-2019 | #21



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

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


Ветеран


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

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


Цитата DJ Mogarych:
, но ничего не вышло. »
То есть?

Скрытый текст
Код: Выделить весь код
$sContent = @'
1. произвольный текст
2. произвольный текст
3. произвольный текст txt1 произвольный текст
4. произвольный текст
5. произвольный текст
6. произвольный текст txt1 произвольный текст
7. произвольный текст
8. произвольный текст txt1 произвольный текст
9. произвольный текст
10. произвольный текст
11. произвольный текст
'@

[RegEx]::IsMatch($sContent, ".*txt1.*\n.*\n")
[RegEx]::Replace($sContent, ".*txt1.*\n.*\n", "")
Цитата:
Код: Выделить весь код
True
1. произвольный текст
2. произвольный текст
5. произвольный текст
10. произвольный текст
11. произвольный текст

Шаблон будет нуждаться в доработке для охвата граничных случаев, но так-то — работает, не?

Отправлено: 22:05, 23-08-2019 | #22


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата DJ Mogarych:
но ничего не вышло. »
Цитата DJ Mogarych:
но тоже не сработало. »
Тут важно, как подается текст на обработку регэкспами (построчно или массивом)... скорее всего, в этом проблема.

-------
scio me nihil scire. Ѫ

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

Отправлено: 07:51, 24-08-2019 | #23


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

fascinating rhythm


Moderator


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

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


Вот так не работает, хотя почему - непонятно.
Код: Выделить весь код
(gc C:\temp\123.txt) -notmatch ".*txt1.*\n.*\n"
В данном случае то, что в скобках - это массив.
Код: Выделить весь код
(gc C:\temp\123.txt).GetType()

IsPublic IsSerial Name                                     BaseType                                                                                          
-------- -------- ----                                     --------                                                                                          
True     True     Object[]                                 System.Array

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


Отправлено: 08:52, 24-08-2019 | #24


Ветеран


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

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


DJ Mogarych, так — да, не будет работать, потому что командлет Get-Content возвращает именно массив отдельных строк (в которых нет символа \n), а не одну строку с символами «конец строки» внутри. Нужно добавить в командлет Get-Content параметр -Raw, тогда должно получиться то, что нужно.
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:22, 24-08-2019 | #25


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата DJ Mogarych:
(gc C:\temp\123.txt) -notmatch ".*txt1.*\n.*\n" »
а так:
Код: Выделить весь код
(gc C:\temp\123.txt -raw) -notmatch ".*txt1.*\n.*\n"
?
По сути, Ваша запись соответствует:
Код: Выделить весь код
gc C:\temp\123.txt|%{$_ -notmatch ".*txt1.*\n.*\n"}
А чтобы было наглядно, какие процессы происходят:
Код: Выделить весь код
gc C:\temp\123.txt|%{$_;'==='}
gc C:\temp\123.txt -raw|%{$_;'==='}
- в консоли будет видна разница...

-------
scio me nihil scire. Ѫ

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

Отправлено: 09:28, 24-08-2019 | #26


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

fascinating rhythm


Moderator


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

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


Спасибо!
Вот так работает:
Код: Выделить весь код
(gc C:\temp\123.txt -raw) -replace ".*txt1.*\n.*\n"
Да, я догадался уже после того, как написал последнее сообщение, что массив рассматривается не как единый объект, а каждая строка рассматривается по отдельности.

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


Отправлено: 09:46, 24-08-2019 | #27


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата DJ Mogarych:
а каждая строка рассматривается по отдельности »
Да, тут главное - не запутаться в терминологии... массив текста, по сути, один объект, а массив строк - множество объектов, по одному на каждую строку...

-------
scio me nihil scire. Ѫ


Отправлено: 12:55, 24-08-2019 | #28



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удаления строки ниже найденого текста.

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - Нужно написать скрипт на VBS для удаления строки. X0E2003 Скриптовые языки администрирования Windows 1 18-02-2015 09:11
CMD/BAT - [решено] Нужен Батник для удаления части строки d_coder@vk Скриптовые языки администрирования Windows 1 18-03-2014 10:02
Поиск строки текста в группе файлов Serg2010 AutoIt 3 15-05-2013 06:29
2003/XP/2000 - [решено] сбилась функция автоматического удаления выделенного текста клавишей BackSpace myohoji Microsoft Office (Word, Excel, Outlook и т.д.) 3 19-11-2012 18:57
2010 - Word, как сделать, чтобы "Отступ" ниже текста не перемещался вместе с шапкой? HarrysFerrarievich Microsoft Office (Word, Excel, Outlook и т.д.) 9 31-10-2011 01:45




 
Переход