Как извлечь строки, начинающиеся с `Subject:`, из большого количества файлов?

Мне нужно извлечь одну строку, начинающуюся с Subject:. Но проблема в том, что у меня в папке более 1500 .txt файлов. Я использую этот скрипт Python:

from glob import glob
import fileinput
import os

with open('output.txt', 'w') as out:
    files = (os.path.join(p, f) for p, ds, fs in os.walk(os.curdir) for f in fs)
    for line in fileinput.input(files):
        if 'Subject:' in line:
            out.write(line)

на самом деле он работает нормально. Но это заняло много вычислительной мощности и времени. Я ищу команду замены терминала для этого сценария.

1
задан 27 November 2015 в 19:35

3 ответа

Что случилось с:

find ./ -type f -exec grep "Subject:" {} \; >/tmp/output.txt
3
ответ дан 28 November 2015 в 05:35
  • 1
    @MasindeMuliro посмотрите на исправленную информацию в ответе при автоматическом монтировании Вашего раздел NTFS . Сообщите мне, разрешает ли это Вашу проблему, того, если у Вас все еще есть проблемы с совместным использованием. – L. D. James 23 February 2017 в 02:21

Используя sed, отовсюду:

sed -n '/^Subject:/p' /path/to/dir/*.txt

Из каталога, содержащего файлы:

sed -n '/^Subject:/p' *.txt

/^Subject:/ будет соответствовать только строкам, запускающимся с Subject:.

Для сохранения вывода в файле:

sed -n '/^Subject:/p' *.txt >output.file
1
ответ дан 28 November 2015 в 05:35
  • 1
    @TommasoTheaCioni don' t упоминают его, довольный, что это работает! – Jacob Vlijm 19 February 2017 в 03:07

Используя grep с -r для рекурсивного поиска и -m1, чтобы прекратить читать файл после первого соответствия.

grep -rh -m1 '^Subject:' /path/to/your/folder/ > out

Все согласующие отрезки длинной линии находятся в out.

3
ответ дан 28 November 2015 в 05:35

Другие вопросы по тегам:

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