Linux常用指令之 grep(过滤查找)ITeye - 凯发娱乐

Linux常用指令之 grep(过滤查找)ITeye

2019年03月25日10时18分56秒 | 作者: 翠彤 | 标签: 指令,查找,字符 | 浏览: 2528

       前语:grep全称是Global Regular Expression Print,表明大局正则表达式版别,它的运用权限是一切用户。工作方式是它在一个或多个文件中查找字符串模板。假如模板包括空格,则有必要被引证,模板后的一切字符串被看作文件名。查找的成果被送到规范输出,不影响原文件内容

 

1.指令格局:

grep [option] pattern file

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

  

4.规矩表达式:

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\}匹配510个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)  

5.运用实例:

实例1:查找指定进程

指令:

ps -ef|grep svn

输出:

[root@localhost ~]# ps -ef|grep svn

root 4943   1      0  Dec05 ?   00:00:00 svnserve -d -r /opt/svndata/grape/

root 16867 16838  0 19:53 pts/0    00:00:00 grep svn

[root@localhost ~]#

阐明:

榜首条记载是查找出的进程;第二条成果是grep进程自身,并非真正要找的进程。

实例2:查找指定进程个数

指令:

ps -ef|grep svn -c

ps -ef|grep -c svn

输出:

[root@localhost ~]# ps -ef|grep svn -c

2

[root@localhost ~]# ps -ef|grep -c svn 

2

[root@localhost ~]#

阐明:

实例3:从文件中读取关键词进行查找

指令:

cat test.txt | grep -f test2.txt

输出:

[root@localhost test]# cat test.txt 

hnlinux

peida.cnblogs.com

ubuntu

ubuntu linux

redhat

Redhat

linuxmint

[root@localhost test]# cat test2.txt 

linux

Redhat

[root@localhost test]# cat test.txt | grep -f test2.txt

hnlinux

ubuntu linux

Redhat

linuxmint

[root@localhost test]#

阐明:

输出test.txt文件中含有从test2.txt文件中读取出的关键词的内容行

实例3:从文件中读取关键词进行查找 且显现行号

指令:

cat test.txt | grep -nf test2.txt

输出:

[root@localhost test]# cat test.txt 

hnlinux

peida.cnblogs.com

ubuntu

ubuntu linux

redhat

Redhat

linuxmint

[root@localhost test]# cat test2.txt 

linux

Redhat

[root@localhost test]# cat test.txt | grep -nf test2.txt

1:hnlinux

4:ubuntu linux

6:Redhat

7:linuxmint

[root@localhost test]#

阐明:

输出test.txt文件中含有从test2.txt文件中读取出的关键词的内容行,并显现每一行的行号

实例5:从文件中查找关键词

指令:

grep linux test.txt

输出:

[root@localhost test]# grep linux test.txt 

hnlinux

ubuntu linux

linuxmint

[root@localhost test]# grep -n linux test.txt 

1:hnlinux

4:ubuntu linux

7:linuxmint

[root@localhost test]#

阐明:

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

指令:

grep linux test.txt test2.txt

输出:

[root@localhost test]# grep -n linux test.txt test2.txt 

test.txt:1:hnlinux

test.txt:4:ubuntu linux

test.txt:7:linuxmint

test2.txt:1:linux

[root@localhost test]# grep linux test.txt test2.txt 

test.txt:hnlinux

test.txt:ubuntu linux

test.txt:linuxmint

test2.txt:linux

[root@localhost test]#

阐明:

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

实例7:grep不显现自身进程

指令:

ps aux|grep \[s]sh

ps aux | grep ssh | grep -v "grep"

输出:

[root@localhost test]# ps aux|grep ssh

root   2720  0.0  0.0  62656  1212 ?      Ss   Nov02   0:00 /usr/sbin/sshd

root  16834  0.0  0.0  88088  3288 ?      Ss   19:53   0:00 sshd: root@pts/0 

root  16901  0.0  0.0  61180   764 pts/0  S+   20:31   0:00 grep ssh

[root@localhost test]# ps aux|grep \[s]sh]

[root@localhost test]# ps aux|grep \[s]sh

root   2720  0.0  0.0  62656  1212 ?      Ss   Nov02   0:00 /usr/sbin/sshd

root  16834  0.0  0.0  88088  3288 ?      Ss   19:53   0:00 sshd: root@pts/0 

[root@localhost test]# ps aux | grep ssh | grep -v "grep"

root   2720  0.0  0.0  62656  1212 ?      Ss   Nov02   0:00 /usr/sbin/sshd

root  16834  0.0  0.0  88088  3288 ?      Ss   19:53   0:00 sshd: root@pts/0

阐明:

实例8:找出已u最初的行内容

指令:

cat test.txt |grep ^u

输出:

[root@localhost test]# cat test.txt |grep ^u

ubuntu

ubuntu linux

[root@localhost test]#

阐明:

实例9:输出非u最初的行内容

指令:

cat test.txt |grep ^[^u]

输出:

[root@localhost test]# cat test.txt |grep ^[^u]

hnlinux

peida.cnblogs.com

redhat

Redhat

linuxmint

[root@localhost test]#

阐明:

实例10:输出以hat完毕的行内容

指令:

cat test.txt |grep hat$

输出:

[root@localhost test]# cat test.txt |grep hat$

redhat

Redhat

[root@localhost test]#

阐明:

实例11:输出ip地址

指令:

     ifconfig eth0|grep -E "([0-9]{1,3}\.){3}[0-9]"

输出:

[root@localhost test]# ifconfig eth0|grep "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}"

          inet addr:192.168.120.204  Bcast:192.168.120.255  Mask:255.255.255.0

[root@localhost test]# ifconfig eth0|grep -E "([0-9]{1,3}\.){3}[0-9]"

          inet addr:192.168.120.204  Bcast:192.168.120.255  Mask:255.255.255.0

[root@localhost test]#

阐明:

实例12:显现包括ed或许at字符的内容行

指令:

cat test.txt |grep -E "ed|at"

输出:

[root@localhost test]# cat test.txt |grep -E "peida|com"

peida.cnblogs.com

[root@localhost test]# cat test.txt |grep -E "ed|at"

redhat

Redhat

[root@localhost test]#

阐明:

实例13:显现当时目录下面以.txt 完毕的文件中的一切包括每个字符串至少有7个接连小写字符的字符串的行

指令:

grep [a-z]\{7\} *.txt

输出:

[root@localhost test]# grep [a-z]\{7\} *.txt

test.txt:hnlinux

test.txt:peida.cnblogs.com

test.txt:linuxmint

[root@localhost test]#

 

实例14:日志文件过大,欠好检查,咱们要从中检查自己想要的内容,或许得到同一类数据,比如说没有404日志信息的

指令:

grep . access1.log|grep -Ev 404   access2.log

grep . access1.log|grep -Ev (404|/photo/|/css/)   access2.log

grep . access1.log|grep -E 404   access2.log

输出:

[root@localhost test]# grep “.”access1.log|grep -Ev “404”   access2.log

 

阐明:上面3句指令前面两句是在当时目录下对access1.log文件进行查找,找到那些不包括404的行,把它们放到access2.log中,后边去掉’v’,便是把有404的行放入access2.log

 

常见运用,转载保藏之

 

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表凯发娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1

    (转)MAC JDK版别切换ITeye

    版别,装置,对应
  • 2
  • 3

    Linux入门学习笔记ITeye

    文件,光标,用户
  • 4
  • 5

    dnsITeye

    地址,主机,服务器
  • 6

    centos上晋级glibcITeye

    晋级,指定,比较
  • 7

    centos minimal网络ITeye

    装置,默许,网卡
  • 8
  • 9
  • 10