linux--grep 命令

    xiaoxiao2021-03-25  33

    Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。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”参数相同。

      

     

    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 -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]#

     

    [root@Slave2 test1]#  ps aux|grep \ sshroot     20775  0.0  0.4 100440  4628 ?        Ss   10:07   0:00 sshd: root@pts/3root     26633  0.0  0.4 100440  4568 ?        Ss   12:15   0:00 sshd: root@pts/1root     26635  0.0  0.4 100440  4196 ?        Ss   12:15   0:00 sshd: root@nottyroot     26912  0.0  0.0 103252   840 pts/1    S+   13:11   0:00 grep  ssh

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

    [root@Slave2 test1]#  ps aux|grep \ ssh | grep -v "grep" root     20775  0.0  0.4 100440  4628 ?        Ss   10:07   0:00 sshd: root@pts/3 root     26633  0.0  0.4 100440  4568 ?        Ss   12:15   0:00 sshd: root@pts/1 root     26635  0.0  0.4 100440  4196 ?        Ss   12:15   0:00 sshd: root@notty

     

     

    实例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]//解释:[^u]的意思是不包括u,^[^u]最前面的^表示不以什么开头

    hnlinux

    peida.cnblogs.com

    redhat

    Redhat

    linuxmint

    [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:那如果我想要找出来,行尾结束为小数点 (.) 的那一行:

    [root@www ~]# grep -n '\.$' regular_express.txt 1:"Open Source" is a good mechanism to develop programs. 2:apple is my favorite food. 3:Football game is not use feet only. 4:this dress doesn't fit me. 10:motorcycle is cheap than car. 11:This window is clear. 12:the symbol '*' is represented as start. 15:You are the best is mean you are the no. 1. 16:The world <Happy> is the same with "glad". 17:I like dog. 18:google is the best tools for search keyword. 20:go! go! Let's go.

    特别注意到,因为小数点具有其他意义(底下会介绍),所以必须要使用转义字符(\)来加以解除其特殊意义!

     

    实例15:找出空白行:

    [root@www ~]# grep -n '^$' regular_express.txt 22:

    因为只有行首跟行尾 (^$),所以,这样就可以找出空白行啦!

    16、grep命令

    grep命令的OR、AND的多模式匹配(多个正则表达式组合)可以使用grep -e或者\来实现

    例如

    grep -E "[a-z]{5,}" sedText.text

    或者

    grep "[a-z]\{5\}" sedText.text

    17、linux正则匹配ip

    tail -10 var/log/secure | grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}"

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    转载请注明原文地址: https://ju.6miu.com/read-27563.html

    最新回复(0)