Grep命令详解-9个经典使用场景
来源:互联网 发布:mac重装后是英文界面 编辑:程序博客网 时间:2024/05/17 04:23
Grep
全称Global Regular Expression Print,表示全局正则表达式
是一个强大的文本搜索工具,采用正则匹配
1、命令格式
grep [options] files
2、主要参数
-c: 只输出匹配行的数目
-i: 不区分大小写
-n:显示匹配航以及行号
-l:查询多文件的时候只输出包含匹配字符的文件名
-v:反向匹配,即显示不匹配的行
-h: 查询的时候不适用文件名
-s:不显示错误信息
3、部分正则表达式
\ 反义字符:如"\"\""表示匹配""
^$ 开始和结束
[] 单个字符,[A]
[ - ] 匹配一个范围,[0-9a-zA-Z]匹配所有数字和字母
* 前面的字符出现0次或者多次
+ 前面的字符出现了一次或者多次
. 任意字符
你的一个音乐文件夹里有多种格式的文件,而你只想找到艺术家jay的mp3文件,并且不含有任何的混合音轨
2) 使用grep -i 来查找包含jay的行
3)使用grep -vi 来查找不包含remix的行
(2)-A -B -C
很多时候,我们并关心匹配行而是关心匹配行的上下文。这时候-A -B -C就有用了
-A n 后n行,A记忆为(After)
-B n 前n行,B记忆为(Before)
-C n 前n行,后n行,C记忆为(Center)
举例
(3) 用-c来统计数目
你手头有一个很大的文件,这个文件包含网址,比如www.baidu.com tieba.baidu.com等等。你想要知道有多少个隶属于百度的网址
[
(4) -r 递归查找子目录
查找当前目录极其子目录下面包含匹配字符的文件
查找子目录,匹配后输出行号,这里的点表示当前目录
查找子目录,匹配后只输出文件名
[root@localhost ~]# grep -lr HELLO_HWC_CSND_BLOG* .
(5)--line-buffered 打开buffering 模式
你有一个文件是动态的,它不断地添加信息到文件的尾部,而你想要输出包含某些信息的行。即持续的grep一个动态的流
[root@localhost ~]#tail -f file | grep --line-buffered your_pattern
(6)结合ps查找进程
这里我们看到了grep init我们执行的命令也被列出来了
如果不想要这一行,我们可以这么改命令
(7)查找不包含某一个目录
[root@localhost ~]#grep -R --exclude-dir=node_modules 'some pattern' /path/to/search
这里用到了-o和-P命令
我们通过man grep查看
-o, --only-matching:
Show only the part of a matching line that matches PATTERN.
-P, --perl-regexp:
Interpret PATTERN as a Perl regular expression.
也就是说-o,只显示匹配行中匹配正则表达式的那部分
-P,作为Perl正则匹配
全称Global Regular Expression Print,表示全局正则表达式
是一个强大的文本搜索工具,采用正则匹配
1、命令格式
grep [options] files
2、主要参数
-c: 只输出匹配行的数目
-i: 不区分大小写
-n:显示匹配航以及行号
-l:查询多文件的时候只输出包含匹配字符的文件名
-v:反向匹配,即显示不匹配的行
-h: 查询的时候不适用文件名
-s:不显示错误信息
3、部分正则表达式
\ 反义字符:如"\"\""表示匹配""
^$ 开始和结束
[] 单个字符,[A]
[ - ] 匹配一个范围,[0-9a-zA-Z]匹配所有数字和字母
* 前面的字符出现0次或者多次
+ 前面的字符出现了一次或者多次
. 任意字符
4、经典场景
除非要精确区分大小写,否则请加上-i来忽略大小写
(1)结合find命令和管道你的一个音乐文件夹里有多种格式的文件,而你只想找到艺术家jay的mp3文件,并且不含有任何的混合音轨
[root@localhost ~]#find . -name ".mp3" | grep -i jay | grep -vi "remix"分析: 1)使用find -name 来列出所有mp3文件,重定向给grep
2) 使用grep -i 来查找包含jay的行
3)使用grep -vi 来查找不包含remix的行
(2)-A -B -C
很多时候,我们并关心匹配行而是关心匹配行的上下文。这时候-A -B -C就有用了
-A n 后n行,A记忆为(After)
-B n 前n行,B记忆为(Before)
-C n 前n行,后n行,C记忆为(Center)
举例
[root@localhost ~]# ifconfig | grep -A 2 "Link encap"eth0 Link encap:Ethernet HWaddr 00:0C:29:F3:38:15 inet addr:192.168.91.129 Bcast:192.168.91.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fef3:3815/64 Scope:Link--lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host[root@localhost ~]# ifconfig | grep -C 2 "lo" Interrupt:67 Base address:0x2024 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host
(3) 用-c来统计数目
你手头有一个很大的文件,这个文件包含网址,比如www.baidu.com tieba.baidu.com等等。你想要知道有多少个隶属于百度的网址
[
root@localhost ~]# grep -c "*baidu.com*" filename例子[root@localhost ~]# cat file.txtwtmp begins Mon Feb 24 14:26:08 2014192.168.0.1162.12.0.123"123"123""123njuhwc@163.comnjuhwc@gmil.com 123www.baidu.comtieba.baidu.comwww.google.comwww.baidu.com/search/index[root@localhost ~]# grep -cn ".*baidu.com.*" file.txt 3
(4) -r 递归查找子目录
查找当前目录极其子目录下面包含匹配字符的文件
查找子目录,匹配后输出行号,这里的点表示当前目录
[root@localhost ~]# grep -nr HELLO_HWC_CSND_BLOG* .
例子:
[root@localhost ~]# grep -nr baidu ../file.txt:8:www.baidu.com./file.txt:9:tieba.baidu.com./file.txt:11:www.baidu.com/search/index./test/test.txt:1:http://www.baidu.com
查找子目录,匹配后只输出文件名
[root@localhost ~]# grep -lr HELLO_HWC_CSND_BLOG* .
例子:
[root@localhost ~]# grep -lr baidu ../file.txt./test/test.txt
(5)--line-buffered 打开buffering 模式
你有一个文件是动态的,它不断地添加信息到文件的尾部,而你想要输出包含某些信息的行。即持续的grep一个动态的流
[root@localhost ~]#tail -f file | grep --line-buffered your_pattern
(6)结合ps查找进程
[root@localhost ~]# ps aux | grep initroot 1 0.0 0.1 2072 632 ? Ss 22:52 0:01 init [5] root 4210 0.0 0.1 6508 620 ? Ss 23:01 0:00 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "/usr/bin/dbus-launch --exit-with-session /etc/X11/xinit/Xclients"root 4233 0.0 0.0 2780 504 ? S 23:01 0:00 /usr/bin/dbus-launch --exit-with-session /etc/X11/xinit/Xclientsroot 4956 0.0 0.1 3920 680 pts/1 R+ 23:27 0:00 grep init
这里我们看到了grep init我们执行的命令也被列出来了
如果不想要这一行,我们可以这么改命令
[root@localhost ~]# ps aux | grep [i]nitroot 1 0.0 0.1 2072 632 ? Ss 22:52 0:01 init [5] root 4210 0.0 0.1 6508 620 ? Ss 23:01 0:00 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "/usr/bin/dbus-launch --exit-with-session /etc/X11/xinit/Xclients"root 4233 0.0 0.0 2780 504 ? S 23:01 0:00 /usr/bin/dbus-launch --exit-with-session /etc/X11/xinit/Xclients
(7)查找不包含某一个目录
[root@localhost ~]#grep -R --exclude-dir=node_modules 'some pattern' /path/to/search
例子
[root@localhost ~]# lsanaconda-ks.cfg Desktop file.txt find.result install.log install.log.syslog test[root@localhost ~]# grep -r baidu ../file.txt:www.baidu.com./file.txt:tieba.baidu.com./file.txt:www.baidu.com/search/index./test/test.txt:http://www.baidu.com这时候如果我们不想包含test目录
[root@localhost ~]# grep -R --exclude-dir=text "baidu" ../file.txt:www.baidu.com./file.txt:tieba.baidu.com./file.txt:www.baidu.com/search/index如果报错
grep: unrecognized option `--exclude-dir=test'
说明版本过老,更新下就ok
这里用到了-o和-P命令
我们通过man grep查看
-o, --only-matching:
Show only the part of a matching line that matches PATTERN.
-P, --perl-regexp:
Interpret PATTERN as a Perl regular expression.
也就是说-o,只显示匹配行中匹配正则表达式的那部分
-P,作为Perl正则匹配
[root@localhost ~]# cat file.txtwtmp begins Mon Feb 24 14:26:08 2014192.168.0.1162.12.0.123"123"123""123njuhwc@163.comnjuhwc@gmil.com 123www.baidu.comtieba.baidu.comwww.google.comwww.baidu.com/search/index[root@localhost ~]# grep -oP "([0-9]{1,3}\.){3}[0-9]{1,3}" file.txt192.168.0.1162.12.0.123
(9)查找邮箱
[root@localhost ~]# grep -oP "[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+" file.txt
例子
[root@localhost ~]# cat file.txtwtmp begins Mon Feb 24 14:26:08 2014192.168.0.1162.12.0.123"123"123""123njuhwc@163.comnjuhwc@gmil.com 123www.baidu.comtieba.baidu.comwww.google.comwww.baidu.com/search/index[root@localhost ~]# grep -oP "[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+" file.txtnjuhwc@163.comnjuhwc@gmil.com
17 0
- Grep命令详解-9个经典使用场景
- Grep命令详解-9个经典使用场景
- grep 命令 使用详解
- grep命令使用详解
- linux grep命令使用详解
- linux grep命令使用的详解
- 【Linux】grep命令的使用详解
- grep 命令详解
- grep命令详解
- grep命令详解
- grep命令详解
- grep命令详解
- grep命令详解
- grep命令详解
- shell grep 命令详解
- linux命令 grep详解
- unix-grep命令详解
- grep命令详解
- 9i数据库的RMAN备份恢复
- 数据迁移
- DataGuard配置
- 大熊市中的准确判断与果断离场
- 自己出的题:唐学长的蜜月之旅(数论:欧拉函数)
- Grep命令详解-9个经典使用场景
- java线程池
- Maven项目多模块拆分
- Android APK反编译详解(附图)
- UVA10405 (DP)
- uva 10405(最长公共子序列)
- C#一些小知识
- XCode6中debug app的视图结构
- Win7 64位 下SlikSVN 的安装配置