Pythell

博客园 首页 新随笔 联系 订阅 管理
grep "match_text" file1 file2 file3 ...                        #grep可以对多个文件进行过滤
--color    选项可以在输出结果中用颜色显示出所匹配的部分
-E            选项后面可接正则表达式
-v            结果中不显示匹配的到行
-i             匹配时忽略大小写
-c            统计文件或者文本中包含匹配字符串的行数,注意在单行中多次匹配的只统计为一行
-n            结果中显示行号
-b            显示匹配字符所在行的字符或字节偏移,注意偏移计数从0开始,如
                echo "gnu is not unix" | grep -b -o "not"的结果为“7:not" 表示not在行中偏移为7。
-o            选项可以在结果中只输出匹配的部分。-b和-o选项经常配合使用
-e            选项可以匹配多个样式,如 grep -e "text1" -e "text2" file.txt表示在file.txt文件中找到含有text1和text2字符的行
-l             选项可在多个文件过滤时列出含有匹配字符的文件名
 
 
技巧:
1、递归搜索文件: grep "text" . -R -n在当前目录下递归搜索含有"text"字符的所有文件并显示text在文件中所处行号。
2、常用的样式可以做成文本,然后用-f选项对样式文本中逐一匹配,比如样式文本style.txt内容如下:
[root@CentOS-6 testdir]# cat style.txt 
[1-9][0-9]{1,2}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}  #正则表达式,用来匹配IP地址
    要匹配的文件test内容如下:
[root@CentOS-6 testdir]# cat test 
max
maxtrix
010-12345678

IPADDR: 192.168.0.1
0.0.0.0      

    则可以使用 grep -Ef style.txt test命令来寻找含有IP地址的行
[root@CentOS-6 testdir]# grep -Ef style.txt test 
IPADDR: 192.168.0.1
3、在grep搜索中包含或排除文件:
        grep "main()" . -r --include *.{c,cpp}            #在目录中递归搜索所有的.c和.cpp文件
        grep "main()" . -r --exclude "README"       #在搜索中排除所有的README文件
        如果需要排除目录,可以使用 --exclude-dir 选项
        如果要从文件中读取所需排除的文件列表,可使用 --exclude-from filelist.txt
4、使用0值字节后缀的grep与xargs:grep "test" file* -lZ | xargs -0 rm 表示以0字符分隔符合的文件列表并交给xargs使用rm命令删除。
[root@CentOS-6 testdir]# echo "bad words" > file1.txt
[root@CentOS-6 testdir]# echo "nice words" > file2.txt
[root@CentOS-6 testdir]# echo "bad things" > file3.txt
[root@CentOS-6 testdir]# ls
file1.txt  file2.txt  file3.txt  style.txt  test  z.txt
[root@CentOS-6 testdir]# grep "bad" file* -lZ | xargs -0 rm
[root@CentOS-6 testdir]# ls
file2.txt  style.txt  test  z.txt
5、grep的静默输出: -q选项可以使grep命令不显示任何输出但会根据执行结果的到相应的返回值,命令成功返回0,失败返回非0.
6、打印匹配文本以及之前或之后的行:
      grep "text" -A 3                    #打印匹配含有"text"字符的行以及其后的3行,共4行
      grep "text" -B 3                    #打印匹配含有"text"字符的行以及它前面的3行,共4行
      grep "text" -C 3                    #打印匹配含有"text"字符的行以及他前面和后面的3行,共7行
[root@CentOS-6 testdir]# seq 10 | grep 5 -A 3
5
6
7
8
[root@CentOS-6 testdir]# seq 10 | grep 5 -B 3
2
3
4
5
[root@CentOS-6 testdir]# seq 10 | grep 5 -C 3
2
3
4
5
6
7
8
posted on 2014-04-09 10:15  BeanHe  阅读(203)  评论(0编辑  收藏  举报