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

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

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

Аватара для Freddy1984

Старожил


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

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


Изменения
Автор: Freddy1984
Дата: 15-08-2019
Вложения
Тип файла: zip файл.zip
(512 байт, 7 просмотров)
Здравствуйте! Подскажите пожалуйста как на 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


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

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


Freddy1984, давайте начнём как обычно — Вы упакуете файл в архив и приложите к сообщению.

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



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

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


Аватара для Freddy1984

Старожил


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

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


Цитата Iska:
Вы упакуете файл в архив и приложите к сообщению. »
прикрепил

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


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


Ветеран


Contributor


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

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


Freddy1984, так может лучше и искать и удалять именно строку с «SetREV=»?
Это сообщение посчитали полезным следующие участники:

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


Аватара для Freddy1984

Старожил


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

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


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

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


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


Ветеран


Contributor


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

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


Freddy1984,
VBS. Путь укажИте свой
Код: Выделить весь код
FileIn = "Z:\Box_Arc\файл\цель.txt"

RegExp = Chr(13) + "?" + Chr(10) + "?" + ".*SetREV=.*" + Chr(13) + "?" + Chr(10) + "?" + "VER:1\.10\.50="
Rep = Chr(13) + Chr(10) + "VER:1.10.50="

With CreateObject("Scripting.FileSystemObject")
    On Error Resume Next
    With .OpenTextFile(FileIn, 1)
        If Err.Number <> 0 Then
            MsgBox "Error open file " + vbCrLf + vbCrLf + FileIn + vbCrLf + vbCrLf + "Err.Number " + CStr(Err.Number) + vbCrLf + Err.Description
            WScript.Quit 1
        End If
        InTxt = .ReadAll
        If Err.Number <> 0 Then
            MsgBox "Error read file " + vbCrLf + vbCrLf + FileIn + vbCrLf + vbCrLf + "Err.Number " + CStr(Err.Number) + vbCrLf + Err.Description
            WScript.Quit 1
        End If
        .Close
        On Error GoTo 0
    End With
            
    With CreateObject("VBScript.RegExp")
        .Pattern = RegExp
        .IgnoreCase = True
        .Global = True
    If Not .Test(InTxt) Then
            MsgBox "no substrings to replace. Reg expression:" + vbCrLf + vbCrLf + """" + RegExp + """"
            WScript.Quit 1
    End If
        Result = .Replace(InTxt, Rep)
    End With
    
    With .CreateTextFile(FileIn, True)
        .Write Result
        .Close
    End With
    
End With

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

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

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


Аватара для Freddy1984

Старожил


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

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


Цитата megaloman:
VBS. »
Я благодарю Вас. А может вы в курсе как на powershell это сделать?

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


Аватара для YuS_2

Старожил


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

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


Цитата Freddy1984:
Надо во всём txt файле найти и удалить одну предыдущую строку перед VER:1.10.50=(значение меняется) »
Цитата Freddy1984:
как на powershell это сделать? »
Допустим, что предыдущая строка, это set REV=(значение меняется), тогда код можно написать так:
Код: Выделить весь код
(gc 'цель.txt' -enc utf8 -raw) -replace 'SetREV[^\n]*\n(?=VER:1\.10\.50=)'|
out-file 'результат.txt' -enc utf8
Если же, предыдущая строка, это любой текст, тогда шаблон регэкспа необходимо будет исправить на такой:
Код: Выделить весь код
(gc 'цель.txt' -enc utf8 -raw) -replace '(?<=^|\n)[^\n]+\n(?=VER:1\.10\.50=)'|
out-file 'результат.txt' -enc utf8

-------
scio me nihil scire


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

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

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


Ветеран


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

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


С помощью sed:
Код: Выделить весь код
sed -i "/set rev=.*/Id" input.txt
С помощью pwsh:
Код: Выделить весь код
(sls 'set rev=.*' -notmatch .\input.txt).line
Это сообщение посчитали полезным следующие участники:

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


Аватара для Freddy1984

Старожил


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

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


Цитата YuS_2:
Если же, предыдущая строка, это любой текст, тогда шаблон регэкспа необходимо будет исправить на такой: »
Супер! Вопрос закрыт.

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



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




 
Переход