grep命令参数列表过长?我们还有find、xargs和grep
2014-12-09 16:52
204 查看
一、问题
捞取当前目录中指定子目录下指定服务器指定时间范围内所有包含有“功勋获取”的日志内容1、指定子目录
1.2.3.25....
1.2.3.83
2、指定服务器
该服务器的日志的文件名格式为:sceneserver.log.(年的后两位,两位数)(月份,不够用0补,两位数)(日,不够用0补,两位数)-(小时,不够用0补,两位数)
如2014年1月22号16点的日志文件名为:sceneserver.log.140122-16
3、指定时间范围
从2014年10月22到2014年12月9号二、grep的无奈
毋庸置疑,直接想到的肯定是强大的grep,写出命令:grep '功勋获取' 1.2.3.{2[5-9],[3-7][0-9],8[0-3]}/sceneserver.log.14{10{2[2-9],3},11,120[1-9]}* > tmp.log
不一会结果就出来了。提示:
提示:命令参数列表过长
(后来发现匹配的文件有接近3w个)
好了,那么问题来了:
除了grep外,还有那些linux命令是支持正则表达的搜索文件的?
三、强大的组合
找文件肯定就是find命令了,man一下,发现find其实是支持正则表达式的。命令:find . -regextype "egrep" -regex "\./1\.2\.3\.(2[5-9]|[3-7][0-9]|8[0-3])/sceneserver\.log\.14(10(2[2-9]|3)|11|120[1-9]).*" -print0 | xargs -0 grep '功勋获取' >> tmp.log
需要注意的地方有:
1、注意find命令参数中-print和-print0的区别、以及xargs参数有-0参数和没有-0参数的区别
2、可以使用下面的命令查看匹配的文件有多少个
find . -regextype "egrep" -regex "\./1\.2\.3\.(2[5-9]|[3-7][0-9]|8[0-3])/sceneserver\.log\.14(10(2[2-9]|3)|11|120[1-9]).*" -print | wc -l
相关文章推荐
- linux中强大且常用命令:find、xargs、grep
- linux中强大且常用命令:find、xargs、grep
- find grep xargs 命令详解
- 关于 find grep xargs 命令总结
- find 命令-exec 参数与 xargs之间的区别
- 每天一个Linux命令(21)find命令_xargs参数
- find、grep、xargs命令的结合使用
- find命令的xargs参数的使用---Linux学习笔记
- find -iname "*" | xargs grep network_error 2>/dev/null命令中2>/dev/null的含义
- linux 命令参数列表过长以及find用法
- aix 上find, grep, xargs命令用法
- 关于 ‘--exec’ 参数( find 命令)及介绍 ‘xargs ’命令区别
- 几个常用的文本处理shell 命令:find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk
- 关于 ‘--exec’ 参数( find 命令)及介绍 ‘xargs ’命令区别(新版)
- linux中强大且常用命令:find、xargs、grep
- find、grep、xargs命令的结合使用
- linux中强大且常用命令:find、xargs、grep
- freebsd find命令使用参数和Sed命令xargs命令详解
- find、grep、xargs等命令及正则相关
- linux中正则表达式、find、xargs、grep以及sed等命令的用法