Самый простой способ удалить ненужные строки из огромного текстового файла

2964
Shawn

У меня большой текстовый файл размером более 30 мегабайт. Я хочу удалить все строки, которые не соответствуют некоторым конкретным критериям, например, строки, которые не имеют строки «START».

Какой самый простой способ сделать это?

2
Какую операционную систему ты используешь? Unfundednut 14 лет назад 0
@MrStatic: MacOS Shawn 14 лет назад 0

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

3
Doug Harris

Если шаблон действительно так прост, grep -vбудет работать:

grep -v START bigfile.txt > newfile.txt 

В newfile.txt будет все из bigfile.txt, кроме строк с «START».

(В случае, если это не очевидно, это то, что вы будете делать в терминале или другом инструменте командной строки)

2
whatever

Первоначальный вопрос спрашивал, как удалить линии, которые не соответствуют шаблону. Другими словами, как сохранить линии, которые соответствуют шаблону. Таким образом, нет необходимости -v.

grep START infile.txt > outfile.txt 

Обратите внимание, что grep может использовать регулярные выражения для более мощного сопоставления с образцом. Синтаксис немного тупой, хотя.

1
Ignacio Vazquez-Abrams

Используйте GNU sed с -iаргументом.

чтобы сделать ответ немного более подробным .. verbose: "sed -n -e '/ START / p' inputfile". и, возможно, будет хорошей идеей не использовать -i во время игры с командами изменения файла, на всякий случай. akira 14 лет назад 2
1
sleske
grep -v START inputfile 

должно сработать. grepСтандартно для MacOS и Linux / Unix, может быть установлен на MS Windows.

Вариант -vдля в V erting матч - только выходные линии, которые не содержат шаблон (обратный обычного поведения Grep).

1
Mike Fitzpatrick

Для командной строки Windows ( help findдля параметров):

find / v "START" original_file.txt> new_file.txt 

Для Linux, OS X и т. Д. ( man grepДля опций):

grep -v "START" original_file.txt> new_file.txt 

Для более сложного сопоставления текста grepпредлагает гораздо больше функциональности, чем find. Если вы используете Windows, вы можете легко найти порт grepили использовать Windows findstrвместо find.

Похожие вопросы