正则表达式
正则表达式时通常被用来检索和替换那些符合摸个模式的文本内容。它是用单个字符串来描述或替换那些符合某个模式的文本内容
grep
命令:grep
命令格式:grep [选项] ‘word’ filename
选项:
-c :打印符合要求的行数
-n :输出符合要求的行及其行号
-i :表示忽略掉大小写
-v :打印不符合要求的行
-r :遍历所有的目录
-A:后接数字,打印符合要求的行及下面数字行(-A2 ,打印符合要求的行及下面的两行)
-B:后接数字,打印符合要求的行及上面数字行(-B2 ,打印符合要求的行及上面的两行)
-C :后接数字,打印符合要求的行及上下面数字行(-B2 ,打印符合要求的行及上下边的两行)
过滤某个关键词及行号:
[root@shuai-01 grep]# grep -n 'root' passwd1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
某个关键词所在的行数:
[root@shuai-01 grep]# grep -c 'root' passwd2
过滤不带某个关键词的行:
[root@shuai-01 grep]# grep -nv 'nologin' passwd1:root:x:0:0:root:/root:/bin/bash6:sync:x:5:0:sync:/sbin:/bin/sync7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown8:halt:x:7:0:halt:/sbin:/sbin/halt22:shuai:x:1000:1000::/home/shuai:/bin/bash23:user1:x:1001:1001::/home/user1:/bin/bash24:user2:x:1003:1005::/home/user5:/bin/bash
打印符合要求的行及下两行:
[root@shuai-01 grep]# grep -A2 'root' passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologin--operator:x:11:0:operator:/root:/sbin/nologingames:x:12:100:games:/usr/games:/sbin/nologinftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
打印符合要求上两行:
[root@shuai-01 grep]# grep -B2 'root' passwdroot:x:0:0:root:/root:/bin/bash--halt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologin
打印符合要求行及上下两行:
[root@shuai-01 grep]# grep -C2 'root' passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologin--halt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologingames:x:12:100:games:/usr/games:/sbin/nologinftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
正则表达式
在正则表达式中,“^”表示行的开始,
$表示行的结尾,
空行可以用“^$”表示。而中括号”[]”,如[0-9]表示数字0到9,[a-z] 表示字母a到z, [^0-9] 表示不是数字。要是^[^0-9] 表示不是以数字0到9做开头。
一个写正则博客,写的很好:
https://my.oschina.net/u/3497124/blog/1137725
几个正则表达式和grep结合的用法
打印有数字的行:
[root@shuai-01 grep]# grep '[0-9]' inittab 111111111111112222222222&33333333333!2332423434# multi-user.target: analogous to runlevel 3# graphical.target: analogous to runlevel 5
打印没有数字的行:
[root@shuai-01 grep]# grep -v '[0-9]' inittab # inittab is no longer used when using systemd.shadhshkdjfaldbacjlasdkfnkjsadnc## ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.## Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
打印不以#号开头的行及行号:
[root@shuai-01 grep]# grep -nv '^#' inittab 2:shkdjfaldbacjlasdkfnkjsadnc#6:shaonfdjnsjchb7:akjdhbjkhac8:ssskjk;lmkldkajsfcipanjkn9::adljfcajadksh,c10:1111111111111111:2222222222&3333333333312:!233242343413::wq14:
打印不以字母开头的行:
[root@shuai-01 grep]# grep -v '^[a-zA-Z]' inittab # inittab is no longer used when using systemd.shadh# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.## Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target:adljfcajadksh,c111111111111112222222222&33333333333!2332423434:wq[root@shuai-01 grep]# grep '^[^a-zA-Z]' inittab # inittab is no longer used when using systemd.shadh# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.## Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target:adljfcajadksh,c111111111111112222222222&33333333333!2332423434:wq
在正则表达式中:
“ . ”表示任意一个字符
“ * ”表示零个或多个前面的字符。如:’i*’ 表示零个或多个i
“ .* ”表示零个或多个任意字符
“ {} ”内部为数字,表示前面字符重复的次数。如:’g{2}’表示g重复两次。’g{1,3}’ 表示g重复两到三次
“ + ”表示一次或多次前面的字符。如’i+’ 表示一个或多个i
“ ? ”表示零个或一个?前面的字符
“ | ”表示或者的意思 。如’aaa|iii’表示aaa或者iii
过滤r和o中有一个任意的字符:
[root@shuai-01 grep]# grep 'r.o' passwdroot:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologin
‘*’和‘+’比较:‘ii+’表示 ii ,iii , i……
‘ii*’表示i,ii,iii ,i….
这个你要将特殊字符和前面的一个字符看成一个整体,i(i+),i(i*)
[root@shuai-01 grep]# egrep 'i+' 1.txtiii[root@shuai-01 grep]# egrep 'i*' 1.txtiiigr
指定要过滤的次数:o要过滤两次
[root@shuai-01 grep]# grep 'o\{2\}' passwdroot:x:0:0:root:/root:/bin/bashlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologinpostfix:x:89:89::/var/spool/postfix:/sbin/nologin[root@shuai-01 grep]# grep -E 'o{2}' passwdroot:x:0:0:root:/root:/bin/bashlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologinpostfix:x:89:89::/var/spool/postfix:/sbin/nologin[root@shuai-01 grep]# egrep 'o{2}' passwdroot:x:0:0:root:/root:/bin/bashlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologinpostfix:x:89:89::/var/spool/postfix:/sbin/nologin
过滤字符串1或者2:‘root|nologin’
[root@shuai-01 grep]# egrep 'root|nologin' passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologingames:x:12:100:games:/usr/games:/sbin/nologinftp:x:14:50:FTP User:/var/ftp:/sbin/nologinnobody:x:99:99:Nobody:/:/sbin/nologinsystemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologinsystemd-network:x:192:192:systemd Network Management:/:/sbin/nologindbus:x:81:81:System message bus:/:/sbin/nologinpolkitd:x:998:996:User for polkitd:/:/sbin/nologintss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologinpostfix:x:89:89::/var/spool/postfix:/sbin/nologinsshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologinchrony:x:997:995::/var/lib/chrony:/sbin/nologin
shell中特殊字符于正则特殊字符对比:
shell中:
‘*’表示零个或多个任意字符
‘?’表示一个任意字符
正则中:
‘*’表示零个或多个前面字符
‘+’表示一个或多个前面字符
‘?’表示零个或一个前面字符
‘.’任意一个字符