如何遍历目录文件执行grep并将结果汇总到单个文件?
当然可行!这是完全可以实现的需求
我猜你之前可能是参数用错了或者追加方式不对,下面给你几个实用的方法,帮你把所有文件里的数字提取汇总到一个文件里:
方法1:直接处理当前目录下的所有文件(不含子目录)
如果你的目标文件都在当前目录,没有嵌套子目录,用这条命令就够了:
grep -o '[0-9]\+' * >> all_numbers.txt
-o参数是关键:它会让grep只输出匹配到的数字部分,而不是整行内容[0-9]\+用来匹配一个或多个连续的数字(如果要匹配带小数点的数字,可以改成[0-9.]\+)*代表当前目录下的所有文件>>是追加到目标文件,如果你用了>会直接覆盖文件内容,这可能是你之前失败的原因之一
方法2:包含子目录里的所有文件
如果需要遍历当前目录及所有子目录里的文件,用 find 命令更靠谱:
find . -type f -exec grep -o '[0-9]\+' {} \; >> all_numbers.txt
find . -type f会找出当前目录下所有的普通文件(排除目录、链接等)-exec grep ... {} \;会对每个找到的文件执行grep命令,{}代表当前找到的文件名- 同样用
>>追加结果到输出文件
可选:对数字排序并去重
如果需要汇总后的数字是有序且不重复的,可以加上排序和去重步骤:
grep -o '[0-9]\+' * | sort -n | uniq >> all_numbers.txt
sort -n按数字大小排序(默认是字典序,加-n才是数值排序)uniq会去掉重复的数字
注意事项
- 如果你的文件名包含空格或特殊字符,
*匹配可能会出问题,这时候优先用find方法 - 如果输出文件
all_numbers.txt已经存在,>>会在原有内容后面继续添加;如果想清空后重新写入,改用> - 要是你只想提取特定类型的文件(比如只处理
.txt文件),可以把*改成*.txt,或者在find里加-name "*.txt"过滤
内容的提问来源于stack exchange,提问作者aeli
相关产品推荐
相关产品推荐

