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

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

Ответить
Настройки темы
CMD/BAT - [решено] Удаление одной предыдущей строки

Аватара для Freddy1984

Пользователь


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

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


Изменения
Автор: Freddy1984
Дата: 15-08-2019
Вложения
Тип файла: zip файл.zip
(512 байт, 6 просмотров)
Здравствуйте! Подскажите пожалуйста как на cmd или powershell реализовать следующее:

В текстовом файле имеем:

строка
строка
set REV=1.1
VER:1.10.50=(значение меняется)
строка
строка


Надо во всём txt файле найти и удалить одну предыдущую строку перед VER:1.10.50=(значение меняется)
То есть часть строки постоянна VER:1.10.50= и далее после знака ровно, значения меняются.

Другими словами, надо просто удалять одну предыдущую строку, что бы получилось:

строка
строка
VER:1.10.50=(значение меняется)
строка
строка

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

 

Ветеран


Contributor


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

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


YuS_2, а почему в первом шаблоне именно «[^\n]», а не просто «.», ведь точка и означает «Any except \n (new line)»? Это просто вопрос, ежели что.

Цитата Freddy1984:
в том то и дело что нет, в моём случае так не выйдет, так как SetREV= лишний ТОЛЬКО перед VER:1.10.50=
Во всех остальных случаях эти SetREV= не трогать. Так как в этом же текстовом файле есть и другие позиции, при которых должно быть присутствие SetREV= »
Выйдет. Причём искать следует именно строку, начинающуюся на SetREV=, находящуюся перед строкой, начинающейся на VER:<цифры>.<цифры>.<цифры>=.

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



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

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


Аватара для YuS_2

Старожил


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

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


Цитата Iska:
а почему в первом шаблоне именно «[^\n]», а не просто «.», ведь точка и означает «Any except \n (new line)»? Это просто вопрос, ежели что. »
Т.к. текст содержит много строк, это более надежный шаблон для захвата одной строки... скажем так, это скорее привычка использовать именно такой вариант, т.к. в программах, которые использую (например, AkelPad), есть настройка поведения захвата символов точкой...
В принципе, можно и так:
Код: Выделить весь код
(gc 'цель.txt' -enc utf8 -raw) -replace '(?-s)SetREV.*\n(?=VER:1\.10\.50=)'|
out-file 'результат.txt' -enc utf8
- это эквивалент... так что, использование такой конструкции не принципиально.

-------
scio me nihil scire


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

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

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


Аватара для Freddy1984

Пользователь


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

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


Цитата Iska:
Выйдет. Причём искать следует именно строку, начинающуюся на SetREV=, находящуюся перед строкой, начинающейся на VER:<цифры>.<цифры>.<цифры »
ну, в общим то если искать строку именно перед VER:<цифры> и потом её (SetREV) удалять то это согласен, тоже верно.
Но это по факту всё тоже что я описал выше, только вид сбоку

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


Ветеран


Contributor


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

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


YuS_2, спасибо, Ваша мысль понятна. Только точки я бы-таки заэкранировал.

Цитата Freddy1984:
ну, в общим то если искать строку именно перед VER:<цифры> и потом её (SetREV) удалять то это согласен, тоже верно. »
Не «тоже верно», а именно так надо делать, и именно так и было сделано. В противном случае при повторном запуске кода мы получим удаление совсем не того, что требовалось.
Это сообщение посчитали полезным следующие участники:

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


Аватара для YuS_2

Старожил


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

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


Цитата Iska:
Только точки я бы-таки заэкранировал. »
однозначно! это всё моя спешка помноженная на невнимательность...
исправлено.

-------
scio me nihil scire


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



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
phpQuery парсер одной строки заголовка Dark_Delphin Вебмастеру 1 06-10-2018 15:16
Сделать элементы списка одной высоты в пределах каждой строки Мамелюк Вебмастеру 0 25-11-2015 19:17
MSFT SQL Server - Как перенести строки из одной базы в другую sql server 2008 r2 Order Программирование и базы данных 4 04-02-2015 11:00
[решено] Разбить данные одной строки по полям формы support23 AutoIt 5 19-09-2012 15:18
CMD/BAT - Поиск слова в тексте, удаление строки, удаление 8 строк выше и 3 строк ниже Alk-13 Скриптовые языки администрирования Windows 0 10-02-2012 18:06




 
Переход