Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。

grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。

1.命令格式:

grep [option] pattern file

主要参数:

-c:只输出匹配行的计数。

-I:不区分大 小写(只适用于单字符。

-l:查询多文件时只输出包含匹配字符的文件名。

-n:显示匹配行及 行号。

-s:不显示不存在或无匹配文本的错误信息。

-v:显示不包含匹配文本的所有行。

2.命令功能:

用于过滤/搜索的特定字符。可使用正则表达式能多种命令配合使用,使用上十分灵活。

3.命令参数:

-a   --text   #不要忽略二进制的数据。   

-A<显示行数>   --after-context=<显示行数>   #除了显示符合范本样式的那一列之外,并显示该行之后的内容。   

-b   --byte-offset   #在显示符合样式的那一行之前,标示出该行第一个字符的编号。   

-B<显示行数>   --before-context=<显示行数>   #除了显示符合样式的那一行之外,并显示该行之前的内容。   

-c    --count   #计算符合样式的列数。   

-C<显示行数>    --context=<显示行数>或-<显示行数>   #除了显示符合样式的那一行之外,并显示该行之前后的内容。   

-d <动作>      --directories=<动作>   #当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。   

-e<范本样式>  --regexp=<范本样式>   #指定字符串做为查找文件内容的样式。   

-E      --extended-regexp   #将样式为延伸的普通表示法来使用。   

-f<规则文件>  --file=<规则文件>   #指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。   

-F   --fixed-regexp   #将样式视为固定字符串的列表。   

-G   --basic-regexp   #将样式视为普通的表示法来使用。   

-h   --no-filename   #在显示符合样式的那一行之前,不标示该行所属的文件名称。   

-H   --with-filename   #在显示符合样式的那一行之前,表示该行所属的文件名称。   

-i    --ignore-case   #忽略字符大小写的差别。   

-l    --file-with-matches   #列出文件内容符合指定的样式的文件名称。   

-L   --files-without-match   #列出文件内容不符合指定的样式的文件名称。   

-n   --line-number   #在显示符合样式的那一行之前,标示出该行的列数编号。   

-q   --quiet或--silent   #不显示任何信息。   

-r   --recursive   #此参数的效果和指定“-d recurse”参数相同。   

-s   --no-messages   #不显示错误信息。   

-v   --revert-match   #显示不包含匹配文本的所有行。   

-V   --version   #显示版本信息。   

-w   --word-regexp   #只显示全字符合的列。   

-x    --line-regexp   #只显示全列符合的列。   

-y   #此参数的效果和指定“-i”参数相同。

将/etc/passwd,有出现 root 的行取出来

[finance@master2-dev finance]$ grep root /etc/passwd
root:x:::root:/root:/bin/bash
operator:x:::operator:/root:/sbin/nologin
[finance@master2-dev finance]$ grep 'root' /etc/passwd
root:x:::root:/root:/bin/bash
operator:x:::operator:/root:/sbin/nologin

将/etc/passwd,有出现 root 的行取出来,同时显示这些行在/etc/passwd的行号

[finance@master2-dev finance]$ grep -n root /etc/passwd
:root:x:::root:/root:/bin/bash
:operator:x:::operator:/root:/sbin/nologin

在关键字的显示方面,grep 可以使用 --color=auto 来将关键字部分使用颜色显示。 这可是个很不错的功能啊!但是如果每次使用 grep 都得要自行加上 --color=auto 又显的很麻烦~ 此时那个好用的 alias 就得来处理一下啦!你可以在 ~/.bashrc 内加上这行:『alias grep='grep --color=auto'』再以『 source ~/.bashrc 』来立即生效即可喔! 这样每次运行 grep 他都会自动帮你加上颜色显示啦

用 dmesg 列出核心信息,再以 grep 找出内含 eth 那行,要将捉到的关键字显色,且加上行号来表示

[finance@master2-dev finance]$  dmesg | grep -n --color=auto 'eth'
:eth0: no IPv6 routers present

在关键字所在行的前两行与后三行也一起捉出来显示

[finance@master2-dev finance]$ dmesg | grep -n -A3 -B2 --color=auto 'eth'
-RPC: Registered tcp transport module.
-RPC: Registered tcp NFSv4. backchannel transport module.
:eth0: no IPv6 routers present
-hrtimer: interrupt took ns
-rz[]: segfault at fffffffffffffff9 ip 00000038a4a7b93c sp 00007fff00deed88 error in libc-2.12.so[38a4a00000+18a000]
-sh[]: segfault at ip (null) sp 00007fffbfac9e70 error in bash[+d4000]

根据文件内容递归查找目录

# grep 'energywise' *           #在当前目录搜索带'energywise'行的文件

# grep -r 'energywise' *        #在当前目录及其子目录下搜索'energywise'行的文件
# grep -l -r 'energywise' *     #在当前目录及其子目录下搜索'energywise'行的文件,但是不显示匹配的行,只显示匹配的文件

这几个命令很使用,是查找文件的利器。

最新文章

  1. Zookeeper 原理
  2. 5 分钟上手 ECharts
  3. HTML布局篇之双飞翼(圣杯)布局
  4. HDU 1561The more, The Better(树形DP)
  5. RHEL安装docker-compose
  6. POJ 1562(L - 暴力求解、DFS)
  7. 《Python编程从入门到实践》第三章_列表简介
  8. 在 Less 中写 IE 的css hack
  9. Tomcat不停机部署项目
  10. dom4j移除节点不成功
  11. python 中的exec
  12. IntelliJ IDEA 2017版 spring-boot2.0.2 搭建 JPA springboot DataSource JPA 实体类浅谈
  13. sqlserver 建表语句,获取建表语句的存储过程,包括排序规则,索引,字段说明,支持同时生成多个表
  14. mysql必知必会(四、检索数据,五、排序检索数据,六、过滤数据,七、数据过滤)
  15. 使用libcurl显示下载进度
  16. ACM International Collegiate Programming Contest World Finals 2014
  17. Apache版Phoenix的安装(图文详解)
  18. jQuery中this 和 $(this)
  19. 微软企业库5.0 学习之路——第六步、使用Validation模块进行服务器端数据验证
  20. n个数里选出m个不重复的数

热门文章

  1. UVa 1626 (输出方案) Brackets sequence
  2. 通过运行时动态给OC分类添加属性
  3. java动态代理Proxy
  4. python练习程序(批量重命名)
  5. Android 自定义RadioButton的样式
  6. 【转】Bootloader之uBoot简介(转)
  7. Hadoop学习总结之五:Hadoop的运行痕迹
  8. 转:移动开发中一些bug及解决方案
  9. Java把长整型时间转成字符串日期
  10. 关于“怎么比较两个SQL查询语句产生的结果集是否相同”搜集到的一些资料