Подтвердить что ты не робот

Удалить определенные строки в txt файле через пакетный файл

У меня есть сгенерированный файл txt. Этот файл имеет определенные строки, которые являются излишними, и их нужно удалить. Каждая строка, требующая удаления, имеет одну строку в строке; "ОШИБКА" или "ССЫЛКА". Эти жетоны могут появляться в любом месте линии. Я хотел бы удалить эти строки, сохраняя все остальные строки.

Итак, если txt файл выглядит так:

Good Line of data
bad line of C:\Directory\ERROR\myFile.dll
Another good line of data
bad line: REFERENCE 
Good line

Я хотел бы, чтобы файл завершился следующим образом:

Good Line of data
Another good line of data
Good line

ТИА.

4b9b3361

Ответ 1

Используйте следующее:

type file.txt | findstr /v ERROR | findstr /v REFERENCE

Это имеет преимущество использования стандартных инструментов в ОС Windows, а не для поиска и установки sed/awk/perl и т.д.

См. следующий протокол для работы:

C:\>type file.txt
Good Line of data
bad line of C:\Directory\ERROR\myFile.dll
Another good line of data
bad line: REFERENCE
Good line

C:\>type file.txt | findstr /v ERROR | findstr /v REFERENCE
Good Line of data
Another good line of data
Good line

Ответ 2

Вы можете выполнить то же самое решение, что и @paxdiablo, используя только findstr. Нет необходимости связывать несколько команд вместе:

findstr /V "ERROR REFERENCE" infile.txt > outfile.txt

Подробная информация о том, как это работает:

  • /v находит строки, которые не соответствуют строке поиска (тот же самый переключатель @paxdiablo использует)
  • Если строка поиска находится в кавычках, она выполняет поиск OR, используя каждое слово (разделитель - это пробел)
  • findstr может принимать входной файл, вам не нужно кормить его текстом, используя команду "type"
  • " > outfile.txt" отправит результаты в файл outfile.txt, а затем распечатает их на консоль. (Обратите внимание, что он будет перезаписывать файл, если он существует. Вместо этого используйте " → outfile.txt", если вы хотите добавить.)
  • Вы также можете подумать о добавлении переключателя /i для соответствия нечувствительности к регистру.

Ответ 3

Если у вас есть sed:

sed -e '/REFERENCE/d' -e '/ERROR/d' [FILENAME]

Где FILENAME - это имя текстового файла с хорошими и плохими строками

Ответ 4

Если у вас установлен perl, тогда perl -i -n -e"print unless m{(ERROR|REFERENCE)}" должен сделать трюк.