Удалить определенные строки в текстовом файле через командный файл - PullRequest
65 голосов
/ 07 января 2009

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

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

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

ТИА.

Ответы [ 4 ]

98 голосов
/ 07 января 2009

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

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
39 голосов
/ 18 апреля 2013

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

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

Детали того, как это работает:

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

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

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

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

1 голос
/ 07 января 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...