Как проверить, что содержит текстовый файл, и если фиксированное число последних символов соответствует переменной, то удалить тех, кто соответствует?

486
Tom

У меня есть пакетный скрипт, который должен проверить, что содержит текстовый файл ( .logили .txt).

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

Таким образом, если var1=abcзатем каждая строка, которая имеет «abc» в качестве последней (в данном случае три символа), будет удалена из текстового файла.

Как я могу это сделать?

0

1 ответ на вопрос

0
Martin L. Brink

Том,

Я бы попробовал findstr.exe с параметром / v:

findstr /v "text_to_drop" file.txt 

Если вы используете powershell, попробуйте:

PS C:\> Select-String -Path "process.txt" -Pattern "text_to_drop" -NotMatch 

См. Https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-xp/bb490907(v=technet.10) и https://docs.microsoft.com/en- нас / PowerShell / модуль / Microsoft.PowerShell.Utility / выберите строку? вид = 6-PowerShell

Вам нужно будет использовать регулярные выражения для сопоставления строки в конце строки, например, `findstr / v / r / c:"% var1% $ "file.log`. Вывод должен быть сохранен в другой файл, который затем перемещается, чтобы перезаписать исходный файл `file.log`. AFH 5 лет назад 1
@AFH - или используйте параметр `/ E`:` findstr / v / b / c: "% var1%" file.log`. В любом случае, он соответствует только тем строкам, которые заканчиваются на `\ r \ n`. Если в последней строке отсутствует разделитель строк или используются строки в стиле Unix, это не будет работать. dbenham 5 лет назад 1
@dbenham - Да, я забыл о `/ e`, что проще, чем использование регулярных выражений; это также не будет затронуто зарезервированными символами RE в строке соответствия. AFH 5 лет назад 0