Удалить определенные строки в 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
ТИА.
Ответы
Ответ 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)}"
должен сделать трюк.