![如何从大量文件中提取以“主题:”开头的行?](https://linux22.com/image/1131332/%E5%A6%82%E4%BD%95%E4%BB%8E%E5%A4%A7%E9%87%8F%E6%96%87%E4%BB%B6%E4%B8%AD%E6%8F%90%E5%8F%96%E4%BB%A5%E2%80%9C%E4%B8%BB%E9%A2%98%EF%BC%9A%E2%80%9D%E5%BC%80%E5%A4%B4%E7%9A%84%E8%A1%8C%EF%BC%9F.png)
我需要提取以 开头的一行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
有什么问题:
find ./ -type f -exec grep "Subject:" {} \; >/tmp/output.txt
答案2
使用grep
with-r
进行递归搜索并-m1
在第一次匹配后停止读取文件。
grep -rh -m1 '^Subject:' /path/to/your/folder/ > out
所有匹配的行都在 中out
。
答案3
使用sed
,从任何地方:
sed -n '/^Subject:/p' /path/to/dir/*.txt
从包含文件的目录中:
sed -n '/^Subject:/p' *.txt
/^Subject:/
将仅匹配以 开头的行Subject:
。
要将输出保存在文件中:
sed -n '/^Subject:/p' *.txt >output.file