每天一个linux命令(50): grep命令

   2017-02-05 0
核心提示:Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。grep的工作方式是这样的,它在一个或多个文件中搜索字符

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

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

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

命令格式

$ grep [option] pattern file

命令功能

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

命令参数

参数 描述
-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”参数相同

规则表达式

grep的规则表达式

^ #锚定行的开始 如: '^grep' 匹配所有以grep开头的行。

$ #锚定行的结束 如: 'grep$' 匹配所有以grep结尾的行。

. #匹配一个非换行符的字符 如: 'gr.p' 匹配gr后接一个任意字符,然后是p。

* #匹配零个或多个先前字符 如: '*grep' 匹配所有一个或多个空格后紧跟grep的行。

.* #一起用代表任意字符。

[] #匹配一个指定范围内的字符,如 '[Gg]rep' 匹配Grep和grep。

[^] #匹配一个不在指定范围内的字符,如: '[^A-FH-Z]rep' 匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。

\(..\) #标记匹配字符,如 '\(love\)' ,love被标记为1。

\< #锚定单词的开始,如: '\<grep' 匹配包含以grep开头的单词的行。

\> #锚定单词的结束,如 'grep\>' 匹配包含以grep结尾的单词的行。

x\{m\} #重复字符x,m次,如: '0\{5\}' 匹配包含5个o的行。

x\{m,\} #重复字符x,至少m次,如: 'o\{5,\}' 匹配至少有5个o的行。

x\{m,n\} #重复字符x,至少m次,不多于n次,如: 'o\{5,10\}' 匹配5–10个o的行。

\w #匹配文字和数字字符,也就是[A-Za-z0-9],如: 'G\w*p' 匹配以G后跟零个或多个文字或数字字符,然后是p。

\W # \w 的反置形式,匹配一个或多个非单词字符,如点号句号等。

\b #单词锁定符,如: '\bgrep\b' 只匹配grep。

POSIX字符

为了在不同国家的字符编码中保持一至,POSIX(The Portable Operating System Interface)增加了特殊的字符类,如[:alnum:]是[A-Za-z0-9]的另一个写法。要把它们放到[]号内才能成为正则表达式,如[A- Za-z0-9]或[[:alnum:]]。在linux下的grep除fgrep外,都支持POSIX的字符类。

[:alnum:] #文字数字字符

[:alpha:] #文字字符

[:digit:] #数字字符

[:graph:] #非空字符(非空格、控制字符)

[:lower:] #小写字符

[:cntrl:] #控制字符

[:print:] #非空字符(包括空格)

[:punct:] #标点符号

[:space:] #所有空白字符(新行,空格,制表符)

[:upper:] #大写字符

[:xdigit:] #十六进制数字(0-9,a-f,A-F)

使用实例

例一 :查找指定进程

$ ps -ef|grep hexo
faker    13401 19030  0 09:51 pts/2    00:00:15 hexo
faker    15465 15449  0 10:34 pts/3    00:00:00 grep hexo

说明:

第一条记录是查找出的进程;第二条结果是grep进程本身,并非真正要找的进程。

例二 :查找指定进程数

$ ps -ef|grep hexo -c
$ ps -ef|grep -c hexo
2

例三 :从2.txt中读取关键词在1.txt中进行搜索

# -n显示行号
$ cat 1.txt | grep -nf 2.txt
1:If you please draw me a sheep!
2:What!

例四 :从文件中查找关键词

$ grep 'jump' 1.txt
I jumped to my feet,completely thunderstruck.

例五 :从多个文件中查找关键词

$ grep 'jump' 1.txt 2.txt
1.txt:I jumped to my feet,completely thunderstruck.
2.txt:I jump

说明:

多文件时,输出查询到的信息内容行时,会把文件的命名在行最前面输出并且加上”:”作为标示符

例六 :grep不显示本身进程

$ ps aux|grep \[s]sh
$ ps aux | grep ssh | grep -v "grep"

例七 :找出以u开头的行内容

$ cat 1.txt |grep ^u
If you please draw me a sheep!
I jumped to my feet,completely thunderstruck.

例八 :输出非u开头的行内容

$ cat 1.txt | grep ^[^I]
What!
Draw me a sheep!

例九 :输出以!结尾的行内容

$ cat 1.txt |grep \!$
If you please draw me a sheep!
What!
Draw me a sheep!

例十 :显示包含sh或者at字符的内容行

$ cat 1.txt |grep -E "sh|at"
If you please draw me a sheep!
What!
Draw me a sheep!

例十一 :显示当前目录下面以.txt 结尾的文件中的所有包含每个字符串至少有7个连续小写字符的字符串的行

$ grep '[a-z]\{7\}' *.txt
1.txt:I jumped to my feet,completely thunderstruck.
3.txt:kdfkksjdf112123
4.txt:kisdfsf
 
标签: Linux命令
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 每天一条linux命令——halt
    halt命令用来关闭正在运行的Linux操作系统。halt命令会先检测系统的runlevel,若runlevel为0或6,则关闭系统,否则即调用shutdown来关闭系统。 语法:halt(选项)选项:-d:不要在wtmp中记录;-f:不论目前的runlevel为何,不调用shutdown即强制关闭系统;-i:
    02-10
  • 几个linux命令查看堆栈内存问题 几个linux命令
      公司编写代码,发现整个在程序里面调用system时候总是失败,原因是can't allocate memory ,根本原因不是内存不足,而是堆栈内存不够。使用ulimit -s 2048后有所好转但是发现一旦系统进程开启多了后仍然会挂。后来使用objdump -x 后发现了原因有个动态库
    02-09
  • Linux命令总结--rm命令 linux的rmp命令
    (来源于http://www.cnblogs.com/xqzt/p/5398919.html)1、命令简介rm(Remove file 删除目录或文件)删除文件,对于链接文件,只是删除整个链接文件,而原有文件保持不变。新手在删除文件之前一定要知道这些:很重要1.可以用mv代替rm的绝对不要用rm,不要着急
    02-09
  • Linux命令行批量创建目录详解 linux创建目录
    以前一直用-p创建目录链,觉得很方便了。在空目录/opt/app/myapp里创建src,再创建main,再创建javamkdir -p /opt/app/myapp/src/main/java没想到还可以这样玩##¥%……*(root@vm1:~/tmp# mkdir -p src/{{main,test}/{java,resources},main/webapp}root@vm1:
    02-09
  • Linux命令之乐--script和scriptplay
    script和scriptplay可以把终端会话记录到一个文件中,可以用来制作命令行教学视屏。 开始录制会话[root@new test]# script -t 2timing.log -a output.sessionScript started, file is output.session[root@new test]# echo hellohello[root@new test]# echo
    02-09
  • java 开发常用的Linux命令
    1.查找文件 find / -name filename.txt 根据名称查找/目录下的filename.txt文件。find . -name "*.xml" 递归查找所有的xml文件find . -name "*.xml" |xargs grep "hello world" 递归查找所有文件内容中包含hello world的xml文件grep -H 'spring' *.xml 查找所
    02-09
  • 常用Linux命令整理 Linux常用命令总结
    常用Linux命令整理常见系统命令export 查看或修改环境变量# 例:临时修改命令提示符为字符串$export PS1=$# 例:临时修改命令提示符显示系统时间 时间使用\t 表示export PS1="[\u@\h \t \W]\$"man 查看linux系统的手册# 例:查看ls命令如何使用man ls # 回车
    02-09 Linux
  • linux命令行—《命令行快速入门》 linux常用命令csdn
    linux命令行—《命令行快速入门》 linux常用命
    pwd print working directory 打印工作目录hostname my computer's network name 电脑在网络中的名称mkdir make directory 创建路径cd change directory 改变路径ls list directory 列出路径下的内容rmdir remove directory 删除路径pushd push directory 推
    02-09
  • Linux命令(五) 五个常用的linux命令
    Linux命令(五) 五个常用的linux命令
    jenkins触发钉钉报警机制1、安装钉钉插件钉钉报警需要安装Ding Talk插件,支持钉钉报警2、打开钉钉创建钉钉机器人2.1选择机器人类型——自定义2.2添加机器人2.3填写机器人信息填写机器人姓名—设置安全设置为加密类型,并复制出来加密值2.4创建完成保持webhoo
    02-09
  • 03_Linux基础-文件类型-主辅提示符-第1提示符-Linux命令-内外部命令-快捷键-改为英文编码-3个时间-stat-其他基础命令
    03_Linux基础-文件类型-主辅提示符-第1提示符-L
    03_Linux基础-文件类型-主辅提示符-第1提示符-Linux命令-内外部命令-快捷键-改为英文编码-3个时间-stat-{1..100}-du-cd-cp-file-mv-echo-id-shell-ln-env-set-which-rpm-/usr-/与/root-hostname-vim-cat-pwd-alias-unalias-ls-ASCII-wc-chmod博客
    02-09
点击排行