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

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

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

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


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

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


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

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

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

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

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

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

 

Ветеран


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

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


Цитата Grade24:
Есть текстовый файл вида. »
Упакуйте его в архив и приложите к сообщению.

Цитата Grade24:
text1 - это текст который не изменяется. »
Приведите конкретный пример содержимого text1 на основании файла, упакованного в архив.

Вас устроит рещение на WSH/PowerShell?

Отправлено: 11:08, 15-08-2019 | #2



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

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


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


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

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


Вложения
Тип файла: rar in866.rar
(204 байт, 4 просмотров)

Спасибо за быстрый ответ. Увы в файле есть информация которую не могу выложить. Но думаю Вы поймете вчем суть для примера прилагаю файл.

В файле 12 строк, в файле есть три строки где присутствует текст txt1 в строчках 5,7 и 11. Необходимо удалить эти строчки (5,7,11) и удалить строчки после них, строчки 6,8,12.

Рабочий файл содержить почти 4000 строк. Текст по которому ищем строчки (text1) может расспологаться в различных строчках.

Цитата Iska:
Вас устроит рещение на WSH/PowerShell? »
Да, вполне.

Отправлено: 13:01, 15-08-2019 | #3


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата Grade24:
Текст по которому ищем строчки (text1) может расспологаться в различных строчках. »
А если строки будут расположены так:
Код: Выделить весь код
1. произвольный текст
2. произвольный текст txt1 произвольный текст
3. произвольный текст txt1 произвольный текст
4. произвольный текст
По Вашему условию: удаляется строка №2, т.к. в ней содержится маркер "txt1" и за ней сразу же удаляется строка №3, т.к. это последующая строка за строкой с маркером.
Проверить маркер в строке №3 мы уже не можем, т.к. строка удалена...
В сухом остатке: строку №4 удалять уже нельзя, т.к. не выполняются необходимые условия.
А как должно быть?

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

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

Отправлено: 13:58, 15-08-2019 | #4


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


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

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


Цитата YuS_2:
По Вашему условию: удаляется строка №2, т.к. в ней содержится маркер "txt1" и за ней сразу же удаляется строка №3, т.к. это последующая строка за строкой с маркером.
Проверить маркер в строке №3 мы уже не можем, т.к. строка удалена...
В сухом остатке: строку №4 удалять уже нельзя, т.к. не выполняются необходимые условия.
А как должно быть? »
Все нормально, такого не будет, после строчки с txt1 всегда идет строчка без txt1

Отправлено: 14:03, 15-08-2019 | #5


Ветеран


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

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


Цитата YuS_2:
А если строки будут расположены так: »
А я даже не подумал о таком варианте .

Цитата Grade24:
in866.rar »
На всякий случай спрошу. Файл у вас именуется in866.txt, но кодировку имеет UTF-8 с BOM. Так и должно быть? И последняя строка в Вашем образце не завершается символами конца строки — это тоже верно, так и есть?
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:37, 15-08-2019 | #6


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата Grade24:
Все нормально, такого не будет, после строчки с txt1 всегда идет строчка без txt1 »
Ну, если есть уверенность, это хорошо, но т.к. нет полных исходных данных, то лучше учесть всякие варианты...
Примерно так:
powershell
Код: Выделить весь код
$file = '.\in866.txt'
$mrk = 'txt1'
$enc = 'utf8'

$a = gc $file -enc $enc|%{$flg1,$flg2=$false,$false}{
	if($_ -match $mrk){
		$flg1=$true
		$flg2=$true
	} elseif ($flg1 -and $flg2){
		$flg2=$false
	} else {
		$_
		$flg1=$false
		$flg2=$true
	}
}
$a|sc $file -enc $enc
в том числе, будет работать, если есть парные строки с маркером.

Цитата Iska:
А я даже не подумал о таком варианте »
Дык, всего на свете учесть невозможно.
Просто приходилось сталкиваться с подобной постановкой задачи, когда прилегающие, контекстные строки надо было учитывать... кстати, тот код ваял ещё на cmd и если хорошо поискать, то возможно даже он найдется...

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


Последний раз редактировалось YuS_2, 15-08-2019 в 15:10.

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

Отправлено: 15:01, 15-08-2019 | #7


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


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

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


YuS_2,
Спасибо за код, увы не работает. Может что-то нетак делаю. Создал файл 123.bat, файл находиться в тойже папке что и файл in866.txt, запускай 123.bat, но нечего не меняется... Что я делаю нетак ? Пробовал в первой строчке прописать полный путь до файла in866.txt, не помогло.

Цитата YuS_2:
Ну, если есть уверенность, это хорошо, но т.к. нет полных исходных данных, то лучше учесть всякие варианты... »
Я просто не стал углубляться в структуру исходного файла, не хотел вам забивать голову. Если пригодиться расскажу )) Постараюсь максимально понятно объяснить...

Файл состоит из блоков строк, один блок - это две строки, между блоками нет пустых строк. У всех блоков произвольный, разный, не повторяющийся текст. Но есть блоки где первая строчка содержит текст txt1 эти блоки необходимо удалить, тоесть удалить первую и вторую строчку блока.

Последний раз редактировалось Grade24, 15-08-2019 в 15:27.


Отправлено: 15:20, 15-08-2019 | #8


Ветеран


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

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


Цитата Grade24:
Создал файл 123.bat, »
Это не пакетный файл, это скрипт PowerShell.

А на мои вопросы:
Цитата Iska:
На всякий случай спрошу. Файл у вас именуется in866.txt, но кодировку имеет UTF-8 с BOM. Так и должно быть? И последняя строка в Вашем образце не завершается символами конца строки — это тоже верно, так и есть? »
ответите?

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


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата Grade24:
Создал файл 123.bat, файл находиться в тойже папке что и файл in866.txt, запускай 123.bat, но нечего не меняется... Что я делаю нетак ?»
Если по-простому, то всё не так...
То, что это не batch-сценарий, уже написали...
В общем, скрипт необходимо сохранить в текстовом файле, с кодировкой UTF8 с BOM (это не единственная кодировка, но лучше в ней). Файл можно именовать как угодно, но расширение должно быть .ps1
Например: script.ps1
Далее, есть варианты...
Скрипт можно запускать непосредственно из консоли powershell, либо ПКМ на файле скрипта и выбрать соответствующий пункт контекстного меню, либо создать batch-сценарий, например, run.bat:
Код: Выделить весь код
@echo off
echo Выполняем...
powershell -ex bypass .\script.ps1
echo Готово.
pause
и запускать сценарий powershell уже этим пакетным файлом...
В общем, выбор за Вами...

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

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

Отправлено: 17:21, 15-08-2019 | #10



Компьютерный форум 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




 
Переход