文章目录
- 报错:grep: 04:00:30.775: No such file or directory
- 查看zip文件中的内容
- 忽略大小写
- 打印文件名(一般用于多文件)
- 只获取匹配到的内容,不要整行数据
- 获取匹配行前后的数据
- 匹配单个单词
- grep的or,and,not
- or多条件或
- and多条件与
- 通过管道多次grep
- ### 排除掉匹配行(not)
- grep子级目录
- -a的作用
- grep 大文件,多条件的处理方案
- 通配符
- 通配符例子
- 小括号要转义么
- 转义字符
- -l 只查找匹配到的文件
报错:grep: 04:00:30.775: No such file or directory
如果是date要用双引号,否则空格会认为一半是string,一半是file。
查看zip文件中的内容
zgrep dingbusan *.zip
忽略大小写
grep -i *.log
打印文件名(一般用于多文件)
grep -H shipotian *.log
如果条数太多,可以加wc -l
查看条数.
只获取匹配到的内容,不要整行数据
grep -o zhangwuji *.log #
获取匹配行前后的数据
匹配单个单词
grep -word ing *.log
grep的or,and,not
or多条件或
or多条件查询,例如 zhangsan,lisi的我都要
方法有好几种,如下是3种示例:
错误写法:
grep a b test.txt
这样肯定是不行的,因为会把b当做文件。
and多条件与
不只一种办法。
通过管道多次grep
方案一:
多条件与,用多个grep即可。
就是多条件在不同行, 例如异常是多行的。
我们要找Demo类的Exception,可以如下写法,这样2行记录都能显示出来:
方案二:
排列组合下可能的情况(如果字段比较多,那么不太适合):
grep “chu.*yu|yu.*chu” c.txt
### 排除掉匹配行(not)
grep -v zhangfei *.log # 排除带有zhangfei的行
grep子级目录
有的时候,不确定在哪个文件夹下:
如果大致知道在某几个文件夹下,用空格分隔即可,如下:
-a的作用
像处理文本一样处理二进制文件,简单的说就说可以查看二进制文件中的内容。
例如
注: tar是二进制文件。 tar.gz不是二进制文件。 需要用zgrep命令
grep 大文件,多条件的处理方案
如果文件很大,且要通过管道来grep,那么速度不够快。
例如 一个文件8G。
当文件很大的时候,会发现grep是个逐渐处理的过程,找到的行会打印出来,再找到会继续打印。
如果使用管道,那么不会逐渐打印,第一个grep会把内容先缓存起来,通过第二个grep之后才会输出。 这时间肯定不短。 而且重新搜索,又要那么长时间。
解决方案:
分为2步,先存到文件,再grep。
实测第一个语句速度蛮快的,第二个更快。而且a.txt复用起来方便。
这并没有使用新技术,属于技巧上的问题。
通配符
- 任意字符
? 任意单个字符
[abc] 集合内的任何单个字符
[a-c] 范围内的任何字符
[^ab]
不是集合内的任何字符
^c c开头的行
b$ b结尾的行
通配符例子
筛选日志文件:
小括号要转义么
不用。 要匹配小括号,直接输入即可。 输入左斜杠反而会报错。
转义字符
为什么要有转义字符,因为grep是支持正则表达式的,有些符号表示其他含义,所以如果要表示为字符,就需要转义。
常见的要转义的字符:
"
\
( 和 )
写法:
-l 只查找匹配到的文件
例如,有时不要内容,只想要匹配到的文件名,一个-l就可以解决。
grep -l aaa *.log; # 输出结果 a.txt