grep命令参数列表过长?我们还有find、xargs和grep

一、问题

捞取当前目录中指定子目录下指定服务器指定时间范围内所有包含有“功勋获取”的日志内容

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

时间: 2024-07-31 00:42:24

grep命令参数列表过长?我们还有find、xargs和grep的相关文章

linux 命令参数列表过长以及find用法

1.在一个目录下删除大批量的文件时,当使用 rm -rf 或者rm *会提示参数列表过长 通过修改命令为 :find . -name "*" | xargs rm -rf '*',成功删除 2.需要把一个目录下的所有文件mv到另外一个目录,如果当前目录文件特别多,简单使用mv 源目录目的目录会提示参数列表过长 通过修改命令为 :ls | xargs -t -I {} mv {} ../matchres/ 可以把当前目录下的所有文件移到 "../matchres"下

rm 参数列表过长

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 19.0px; font: 14.0px "Helvetica Neue" } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 19.0px; font: 13.0px "Helvetica Neue"; min-height: 15.0px } p.p3 { margin: 0.0px 0.0px 0.

grep命令参数和使用方法

功能说明:查找符合串的条件的文件. 语言 法国:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或文件夹...] 补充说明:grep 指令用于查找内容包括指定的范本样式的文件,假设发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来.若不指定

bash: /usr/bin/ls: 参数或环境列表太长

事件触发 检查主机空间使用情况发现/var/spool/mail/***使用空间达到了100%,也就是说*** 用户邮件满了,当然这并不影响业务正常运行[业务有独立空间存放],查看/var/spool/mail/***内容是,发现了如下报错: 经过网上收集先关资料并测试找到原因如下: 原因:经测试,文件目录中符合条件的文件数量不超过800时可以正常列出来,超过800,就会报参数列表太长错误. 所以要注意以后在shell中`ls ***`获取列表时一定要考虑会不会时间长了有这样的问题发生.

linux zip命令 tar命令 【压缩、解压缩】参数列表:

linux zip命令参数列表: -a 将文件转成ASCII模式 -F 尝试修复损坏的压缩文件 -h 显示帮助界面 -m 将文件压缩之后,删除源文件 -n 特定字符串 不压缩具有特定字尾字符串的文件 -o 将压缩文件内的所有文件的最新变动时间设为压缩时候的时间 -q 安静模式,在压缩的时候不显示指令的执行过程 -r 将指定的目录下的所有子目录以及文件一起处理 -S 包含系统文件和隐含文件(S是大写) -t 日期 把压缩文件的最后修改日期设为指定的日期,日期格式为mmddyyyy 举例: 压缩目录

grep命令中文手册(info grep翻译)

body { font: 13.34px helvetica, arial, freesans, clean, sans-serif; color: black; line-height: 1.4em; padding: 0.7em } p { margin: 1em 0; line-height: 1.5em } pre,code { font: 12px Monaco, "Courier New", "DejaVu Sans Mono", "Bitst

使用grep命令恢复被删除文件的内容

我们知道,rm命令其实并不是真正的从物理上删除文件内容,只过不把文件的inode回收了,其实文件内容还在硬盘上.所以,如果你不小删除了什么比较重要的程序配置文件的时候,我们完全可以用grep命令在恢复,下面是一个恢复示例: grep -a -B 50 -A 60 'some string in the file' /dev/sda1 > results.txt 说明: 关于grep的-a意为–binary-files=text,也就是把二进制文件当作文本文件. -B和-A的选项就是这段字符串之前

(31)grep命令详解:查找文件内容

1.grep命令用于不需要列出文件的全部内容,而是从文件中找到包含指定信息的那些行. grep命令能够在一个或多个文件中,搜索某一特定的字符模式(也就是正则表达式),此模式可以是单一的字符.字符串.单词或句子. 正则表达式是描述一组字符串的一个模式,正则表达式的构成模仿了数学表达式,通过使用操作符将较小的表达式组合成一个新的表达式.正则表达式可以是一些纯文本文字,也可以是用来产生模式的一些特殊字符.为了进一步定义一个搜索模式,grep 命令支持如表 1 所示的这几种正则表达式的元字符(也就是通配

grep命令常用参数及用法

1.grep介绍 grep命令是Linux系统中一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户.grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2. 2.grep常用参数 -a :将 binary 文件以 text 文件的方式搜寻数据