grep命令主要用于过滤文本,grep家族如下
| grep: 在文件中全局查找指定的正则表达式,并打印所有包含该表达式的行 |
| egrep:扩展的egrep,支持更多的正则表达式元字符 |
| fgrep:固定grep(fixed grep),有时也被称作快速(fast grep),意味着它只处理固定字符串即按字面解释所有的字符,而 |
| 不是正常表达式,而grep与egrep是支持正则表达式的,现在很多系统中fgrep已经被grep -F替代,二者的功能完全一样 |
grep命令格式如下
| grep [选项] PATTERN 文件1 文件2 ... |
| |
| [root@egon ~] |
| [root@egon ~] |
| |
| 找到: grep返回的退出状态为0 |
| 没找到: grep返回的退出状态为1 |
| 找不到指定文件: grep返回的退出状态为2 |
grep 命令的输入可以来自标准输入或管道,而不仅仅是文件,例如:
| ps aux |grep '[n]ginx' |
| 为何不能直接ps aux |grep 'nginx'呢,因为不用[]包含,那因为你这条命令本身包含nginx字符 |
| 所以也会被过滤出来,过滤的状态码永远为0 |
| -n, --line-number 在过滤出的每一行前面加上它在文件中的相对行号 |
| -o, --only-matching 只显示匹配的内容 |
| -q, --quiet, --silent 静默模式,没有任何输出,得用$?来判断执行成功没有,即有没有过滤到想要的内容 |
| --color 颜色 |
| -i, --ignore-case 忽略大小写 |
| -A, --after-context=NUM 如果匹配成功,则将匹配行及其后n行一起打印出来 |
| -B, --before-context=NUM 如果匹配成功,则将匹配行及其前n行一起打印出来 |
| -C, --context=NUM 如果匹配成功,则将匹配行及其前后n行一起打印出来 |
| -c, --count 如果匹配成功,则将匹配到的行数打印出来 |
| -v, --invert-match 反向查找,只显示不匹配的行 |
| -w 匹配单词 |
| -E 等于egrep,扩展 |
| |
| -l, --files-with-matches 如果匹配成功,则只将文件名打印出来,失败则不打印 |
| 通常-rl一起用,grep -rl 'root' /etc |
| -R, -r, --recursive 递归 |
示例
| |
| [root@egon ~] |
| 1:root:x:0:0:root:/root:/bin/bash |
| 10:operator:x:11:0:operator:/root:/sbin/nologin |
| [root@egon ~] |
| |
| |
| [root@egon ~] |
| root |
| root |
| root |
| root |
| [root@egon ~] |
| |
| |
| [root@egon ~] |
| [root@egon ~] |
| 0 |
| |
| |
| [root@egon ~] |
| alias grep='grep --color=auto' |
| [root@egon ~] |
| |
| |
| [root@egon ~] |
| EGON |
| [root@egon ~] |
| |
| |
| [root@egon ~] |
| [root@egon ~] |
| [root@egon ~] |
| |
| |
| [root@egon ~] |
| 2 |
| [root@egon ~] |
| |
| |
| [root@egon ~] |
| [root@egon ~] |
| [root@egon ~] |
| [root@egon ~] |
| |
| |
| [root@egon ~] |
| tcp6 0 0 :::80 :::* LISTEN |
| [root@egon ~] |
| tcp6 0 0 :::80 :::* LISTEN |
| [root@egon ~] |
| tcp6 0 0 :::80 :::* LISTEN |
| |
| |
| [root@egon ~] |
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),是计算机科学的一个概念。正则表达式由元字符组成,通常被用来检索、替换那些符合某个模式(规则)的文本(许多程序设计语言都支持利用正则表达式进行字符串操作)。
元字符:是一类可以表达出超越其字面本身含义的特殊字符
| shell元字符(也称为通配符): 由shell解释器来解析,如rm -rf *.pdf,元字符*Shell将其解析为任意多个字符 |
| 正则表达式元字符 : 由各种执行模式匹配操作的程序来解析,比如vi、grep、sed、awk |
| |
| 例如:vim示例: |
| :1,$ s/tom/EGON/g |
| :1,$ s/\<[Tt]om\>/EGON/g |
| 元字符 功能 示例 |
| ^ 行首 ^love |
| $ 行尾 love$ |
| . 除了换行符以外的任意单个字符 l..e |
| * 前导字符的零个或多个 ab*love |
| .* 所有字符 a.*love |
| [] 字符组内的任一字符 [lL]ove |
| [^] 对字符组内的每个字符取反(不匹配字符组内的每个字符) [^a-z0-9]ove |
| ^[^] 非字符组内的字符开头的行 |
| |
| [a-z] 小写字母 |
| [A-Z] 大写字母 |
| [a-Z] 小写和大写字母 |
| [0-9] 数字 |
| |
| \ 用来转义元字符 love\. |
| \< 词首定位符 单词一般以空格或特殊字符做分隔、连续的字符组成 \<love |
| \> 词尾定位符 love\> |
| \(..\) 匹配稍后将要使用的字符的标签 \(love\)able\1er |
| :1,$ s/\(192.168.11\).66/\1.50/g |
| |
| x\{m\} 字符x重复出现m次 e\{3\} |
| x\{m,\} 字符x重复出现m次以上 e\{3,\} |
| x\{m,n\} 字符x重复出现m到n次 e\{3,6\} |
示例
| |
| [root@egon ~] |
| root:x:0:0:root:/root:/bin/bash |
| [root@egon ~] |
| |
| |
| [root@egon ~] |
| root:x:0:0:root:/root:/bin/bash |
| user1:x:1002:1003::/home/user1:/bin/bash |
| egon1:x:198:1005::/home/egon1:/bin/bash |
| gg:x:1004:1006::/home/gg:/bin/bash |
| egon:x:1005:1007::/home/egon:/bin/bash |
| tom:x:1006:1008::/home/tom:/bin/bash |
| [root@egon ~] |
| |
| |
| [root@egon ~] |
| root:x:0:0:root:/root:/bin/bash |
| operator:x:11:0:operator:/root:/sbin/nologin |
| ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin |
| [root@egon ~] |
| |
| |
| [root@egon ~] |
| a |
| |
| ab |
| abb |
| abbb |
| bbbbb |
| [root@egon ~] |
| a |
| ab |
| abb |
| abbb |
| [root@egon ~] |
| |
| |
| [root@egon ~] |
| a123+-*/c11113333c |
| a1c |
| a77Ac |
| a23333c |
| ac |
| 111 |
| 222 |
| 333 |
| [root@egon ~] |
| a123+-*/c11113333c |
| a1c |
| a77Ac |
| a23333c |
| ac |
| [root@egon ~] |
| |
| |
| [root@egon ~] |
| <a href="http://www.baidu.com">"我他妈的是百度"</a> |
| <a href="http://www.sina.com.cn">"我特么的是新浪"</a> |
| [root@egon ~] |
| |
| [root@egon ~] |
| href="http://www.baidu.com">"我他妈的是百度" |
| href="http://www.sina.com.cn">"我特么的是新浪" |
| [root@egon ~] |
| |
| [root@egon ~] |
| href="http://www.baidu.com" |
| href="http://www.sina.com.cn" |
| [root@egon ~] |
| |
| |
| |
| [root@egon ~] |
| a1c |
| a2c |
| a33c |
| aAc |
| aZc |
| [root@egon ~] |
| a1c |
| a2c |
| [root@egon ~] |
| aAc |
| aZc |
| [root@egon ~] |
| [root@egon ~] |
| a33c |
| [root@egon ~] |
| |
| |
| [root@egon ~] |
| a1c |
| a2c |
| a33c |
| aAc |
| aZc |
| [root@egon ~] |
| a1c |
| a2c |
| aAc |
| aZc |
| [root@egon ~] |
| |
| |
| |
| |
| |
| |
| |
| |
| [root@egon ~] |
| tcp6 0 0 :::80 :::* LISTEN |
| [root@egon ~] |
| tcp6 0 0 :::80 :::* LISTEN |
| [root@egon ~] |
| tcp6 0 0 :::80 :::* LISTEN |
Ps: grep匹配换行符和制表符(下述模版文件拷贝的时候制表符会丢失,你需要在你的文件里手动写一下制表符)
| [root@centos-7 ~] |
| eg |
| on1 |
| egon123 |
| 111on222on333eg |
| 666666 |
| egon |
| [root@centos-7 ~] |
| eg-------->高亮 |
| on1------->高亮 |
| eg on123 |
| 111on222on333eg |
| 666666 |
| egon |
| [root@centos-7 ~] |
| eg |
| on |
| [root@centos-7 ~] |
| [root@centos-7 ~] |
| eg |
| on1 |
| eg on123----->高亮,注意,你拷贝这个文档的时候可能无法带上tab键,拷贝到目标文件时自己手动编辑一下加上tab |
| 111on222on333eg |
| 666666 |
| egon |
| [root@centos-7 ~] |
| eg on----->高亮 |
| [root@centos-7 ~] |