问题描述
我有一个包含多个级别的大型文件夹结构(在命名约定中没有模式)。如何运行以下命令从所有文件夹中提取数据?命令是:
perl -wne'while(/[\w\.\-]+@[\w\.\-]+\w+/g){print "$&\n"}'inputfile.txt > outputfile.txt
它适用于一个输入文件,但希望它遍历文件夹和子文件夹中的所有文本文件。
解决方法
我会使用 find 调用带有“-i”选项的 Perl 进行就地编辑。使用“-i”选项,您可以选择为保存的未修改文件指定扩展名;没有它,它会在不保存未修改文件的情况下就地修改文件。
find dirs -name \*.txt -exec perl -i.orig -wne 'while(/[\w\.\-]+@[\w\.\-]+\w+/g){print "$&\n"}' {} \;
或(较少启动 Perl)使用:
find dirs -name \*.txt -print | xargs perl -i.orig -wne 'while(/[\w\.\-]+@[\w\.\-]+\w+/g){print "$&\n"}'
或者,您可以使用 File::Find 模块遍历目录树,然后进行自己的就地编辑,但我认为如果您在 UNIX/ Linux。 (如果在 Windows 上,您可能必须这样做。)