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

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

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

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


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

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


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

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

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

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

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

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

 

Ветеран


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

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


Проще всего задача решается с помощью sed:
Код: Выделить весь код
sed "/txt1/,+1 d" input.txt
В итоге из:
Код: Выделить весь код
1произвольный текст
2произвольный текст
3произвольный текст txt1 произвольный текст
4произвольный текст
5произвольный текст
6произвольный текст txt1 произвольный текст
7произвольный текст
8произвольный текст txt1 произвольный текст
9произвольный текст
10произвольный текст
11произвольный текст
Получим:
Код: Выделить весь код
1произвольный текст
2произвольный текст
5произвольный текст
10произвольный текст
11произвольный текст
Это сообщение посчитали полезным следующие участники:

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



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

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


Ветеран


Contributor


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

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


Добавлю и своё до кучи (на PowerShell):
Скрытый текст
Код: Выделить весь код
$sSourceFile  = 'C:\Мои проекты\0272\in866 2.txt'
$sString4Find = 'txt1'


$sPattern = ".*$sString4Find.*`r`n.*(?:`r`n|$)"

if([System.IO.File]::Exists($sSourceFile)) {
    $sContent = Get-Content -Path $sSourceFile -Encoding UTF8 -Raw

    if([Regex]::IsMatch($sContent, $sPattern)) {
        
        [Regex]::Replace($sContent, $sPattern, '') | Set-Content -Path $sSourceFile -Encoding UTF8 -NoNewline
        Write-Host "Found [$sString4Find] and replaced in content of source file [$sSourceFile]." -ForegroundColor Green
    } else {
        Write-Host "Not found [$sString4Find] in content of source file [$sSourceFile]." -ForegroundColor Red
    }
} else {
    Write-Host "Can't find source file [$sSourceFile]." -ForegroundColor Red
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:13, 16-08-2019 | #12


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


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

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


Друзья большое всем спасибо за помощь, то что нужно.

Использую этот код, без паузы в конце.
Код: Выделить весь код
@echo off
echo Выполняем...
powershell -ex bypass .\script.ps1
echo Готово.
pause
Для запуска этого.
Код: Выделить весь код
$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
Ребята, еще раз, от души спасибо. Нужно сделать на форуме кнопки доната для пользователей. Готов задонатить.

Кстати, если искать текст (маркер) вида 123+, то удаляет больше строк чем нужно. Возможно из-за "+", для меня это не критично.

Попробую код от Iska

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


Отправлено: 14:17, 16-08-2019 | #13


Ветеран


Contributor


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

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


Цитата Grade24:
Кстати, если искать текст (маркер) вида 123+, то удаляет больше строк чем нужно. Возможно из-за "+", для меня это не критично. »
Всё так. «+» в шаблоне регулярного выражения имеет специальный смысл — это квалификатор, означающий «предыдущий символ шаблона должен встретиться один или более раз». Чтобы использовать сам символ плюс, нужно его экранировать другим специальным символом:
Код: Выделить весь код
123\+
Вот здесь: Элементы языка регулярных выражений — краткий справочник | Microsoft Docs Вы можете загрузить (Загрузить в формате Word (DOCX) Download in Word (.docx) format) краткую справку по символам регулярных выражений .Net Framework.
Это сообщение посчитали полезным следующие участники:

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


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


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

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


Добрый день, как в PowerShell в скрипте ps сохранить результат не в utf8 c BOM а в формате utf8 без BOM

Отправлено: 09:26, Вчера | #15


Ветеран


Contributor


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

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


Примерно так.

Отправлено: 15:24, Вчера | #16



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




 
Переход