|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удаления строки ниже найденого текста. |
|
CMD/BAT - [решено] Удаления строки ниже найденого текста.
|
Новый участник Сообщения: 5 |
Профиль | Отправить PM | Цитировать Друзья, всем привет. Обычно по bat много инфы и все мои задачи давно уже решались и я их с легкостью находил, но сейчас не смог найти решение. Помогите пожалуйста.
Есть текстовый файл вида. произвольный текст произвольный текст произвольный текст txt1 произвольный текст произвольный текст произвольный текст произвольный текст txt1 произвольный текст произвольный текст произвольный текст txt1 произвольный текст произвольный текст произвольный текст произвольный текст Где: произвольный текст - это различный текст, не повторяющийся текст. text1 - это текст который не изменяется. Задача, найти в текстовом файле текст "txt1" удалить строчку где находиться этот текст и строчку ниже. |
|
Отправлено: 10:45, 15-08-2019 |
Забанен Сообщения: 793
|
Проще всего задача решается с помощью sed:
В итоге из: 1произвольный текст 2произвольный текст 3произвольный текст txt1 произвольный текст 4произвольный текст 5произвольный текст 6произвольный текст txt1 произвольный текст 7произвольный текст 8произвольный текст txt1 произвольный текст 9произвольный текст 10произвольный текст 11произвольный текст |
Отправлено: 21:19, 15-08-2019 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать Друзья большое всем спасибо за помощь, то что нужно.
Использую этот код, без паузы в конце. Для запуска этого. $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 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Grade24:
Вот здесь: Элементы языка регулярных выражений — краткий справочник | Microsoft Docs Вы можете загрузить (Загрузить в формате Word (DOCX) Download in Word (.docx) format) краткую справку по символам регулярных выражений .Net Framework. |
|
Отправлено: 15:43, 16-08-2019 | #14 |
Новый участник Сообщения: 14
|
Профиль | Отправить PM | Цитировать Добрый день, как в PowerShell в скрипте ps сохранить результат не в utf8 c BOM а в формате utf8 без BOM
|
Отправлено: 09:26, 19-08-2019 | #15 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 15:24, 19-08-2019 | #16 |
fascinating rhythm Сообщения: 6491
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 13:52, 23-08-2019 | #17 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать DJ Mogarych, насколько я понимаю, % — псевдоним командлета ForEach-Object, который поддерживает три скрипт-блока — Begin, Process и End. В данном случае использованы скрипт-блоки Begin и Process. Соответственно, в первом скрипт-блоке Begin двум переменным просто присваиваются два булевых значения, запись вида:
аналогична более привычной записи: Данная конструкция, именуемая «параллельное присваивание», вида «список переменных=список выражений», присутствует во многих современных языках — Lua, Python и пр. |
Последний раз редактировалось Iska, 23-08-2019 в 14:53. Причина: Уточнение. Отправлено: 14:20, 23-08-2019 | #18 |
Забанен Сообщения: 793
|
В случае с PowerShell можно было бы обойтись "многострочной" регуляркой, в смысле захватываем строку соответствующую критерию и следующую строку за ней. Это будет работать за рядом оговорок, но можно сделать несколько иначе.
В более поздних нежели v2 версиях PowerShell, данный подход можно еще более сократить за счет оператора -notin, методов расширений и т.д., в результате чего решение будет похоже скорее на black magic, примерно такое же как в случае с "многострочной" регуляркой. |
Отправлено: 15:11, 23-08-2019 | #19 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Цитата DJ Mogarych:
А если, что-нибудь забудется, то можно всегда освежить в памяти, с подробностями и примерами: |
|
------- Отправлено: 17:42, 23-08-2019 | #20 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|