shell脚本之正则表达式、grep、sed、awk

^word     ##搜索以word开头的 vi/vim中 ^ 一行的开头
word$     ##搜索以word结尾的 vi/vim中 $ 一行的结尾
^$        ##表示空行
.         ##代表且只能代表任意一个字符
\         ##例:\. 只代表点本身,转义符号,让有特殊身份意义的字符,脱掉马甲,还原
\n        ##换行符
\r        ##匹配回车
\w         ##匹配任意一个字符和数字
*         ##重复0次或多次前面的一个字符
.*        ##匹配所有字符。例:^.* 以任意多个字符开头,.*$以任意多个字符结尾
[abc]     ##匹配字符集内的任意一个字符
[^abc]    ##匹配不包含 ^ 后的任意字符的内容。中括号里的 ^ 为取反
[1-9]     ##表示匹配括号内的范围内的任意字符
a\{n,m\}  ##重复n到m次前一个重复的字符。若用egrepsed -r可以去掉斜线
\{n,\}    ##重复至少n 次前一个重复的字符。若用egrepsed -r可以去掉斜线
\{n\}     ##重复n 次前一个重复的字符。若用egrep、sed -r可以去掉斜线
\{,m}\    ##重复少于m次

注:egrep,grep –E或sed –r 过滤一般特殊字符可以不转义

扩展正则(egrep或grep -E)

+          ##重复一次或一次以上前面的一个字符
?          ##重复0次或一次前面的一个字符
|          ##或者的意思,用或的方式查找多个符合的字符串
()         ##找出括号内的字符串

^linux ##以linux开始 linux$ ##以linux结束 linuxfan. ##匹配linuxfans等 coo[kl] ##匹配cool或cook 9[^5689] ##匹配91,92等,但不匹配95,96,98,99 [0-9] ##匹配任意一个所有的数字 [a-z]|[A-Z] ##匹配任意一个所有大小写字母,|属于扩展正则grep -E支持 colou?r ##匹配color或colour,但是不能匹配colouur rollno-9+ ##匹配rollno-9、rollno-99,rollno-999,但不匹配rollno- co*l ##匹配cl,col,cool,coool等 ma(tri)x ##匹配matrix [0-9]{3} ##匹配任意一个三位数,等于[0-9][0-9][0-9] [0-9]{2,} ##匹配任意一个两位数或更多位的数字 [0-9]{2,5} ##匹配从两位数到五位数之间的任意一个数字 Oct (1st|2nd) ##匹配Oct 1st或Oct 2nd a\.b ##匹配a.b,但不能匹配ajb [a-z0-9_]+\@[a-z0-9_]+\.[a-z]{2,4} ##匹配一个邮箱地址 [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} ##匹配IP地址 --grep--

语法:grep [选项] [条件表达式] 目标文件

cat /proc/meminfo |grep -e Mem -e Cache -e Swap ##查看系统内存、缓存、交换分区-e的作用是匹配多个表达式 grep -R -o -n -E '[a-z0-9_]+\@[a-z0-9_]+\.[a-z]{2,4}' /etc/ ##查找/etc目录下的所有文件中的邮件地址;-R递归,-n表示匹配的行号,-o只输出匹配内容,-E支持扩展正则表达式, grep -R -c 'HOSTNAME' /etc/ |grep -v "0$" ##查找/etc/目录下文件中包含“HOSTNAME”的次数,-c统计匹配次数,-v取反 grep -R -l 'HOSTNAME' /etc/ ##查找包含“HOSTNAME”的文件名,-l显示匹配的文件名,-L显示不匹配的文件名 dmesg | grep -n --color=auto 'eth' ##查找内核日志中eth的行,显示颜色及行号 dmesg | grep -n -A3 -B2 --color=auto 'eth' ##用 dmesg 列出核心信息,再以 grep 找出内含 eth 那行,在关键字所在行的前两行与后三行也一起找出出来显示 cat /etc/passwd |grep -c bash$ ##统计系统中能登录的用户的个数 touch /tmp/{123,123123,456,1234567}.txt ##创建测试文件,以下三条命令是一样的效果,匹配文件名123,可以包含1个到多个 ls |grep -E '(123)+' ls |grep '\(123\)\+' ls |egrep '(123)+' ps -ef |grep -c httpd ##统计httpd进程数量 grep -C 4 'games' --color /etc/passwd ##显示games匹配的“-C”前后4行 grep ^adm /etc/group ##查看adm组的信息 ip a |grep -E '^[0-9]' |awk -F : '{print $2}' ##获取网卡名称 ifconfig eth0 |grep -E -o 'inet addr:[^ ]*' |grep -o '[0-9.]*' ##截取ip地址,[^ ]*表示以非空字符作为结束符,[0-9.]*表示数字和点的组合 ip a |grep inet |grep eth0 |grep -o "inet[^/]*" |grep -o "[0-9.]*" ##截取ip地址 ifconfig eth0 |grep -i hwaddr |awk '{print $5}' ##截取MAC地址 ip a |grep -A 3 "eth0" |grep link/ether |grep -o "ether[^r]*" |grep -o -E "[0-9a-f:]+"|grep -E "[0-9a-f:]{2}$" ##截取MAC地址 grep "^m" oldboy.log ##过滤输出以m开头的行 grep "m$" oldboy.log grep -vn "^$" oldboy.log ##过滤空行 grep -o "0*" oldboy.log grep -o "oldb.y" oldboy.log grep "\.$" oldboy.log ##以.结尾的行 grep "0\{3\}" oldboy.log ##重复三次

--sed--

语法:sed [options] 'command' file(s)

选项:

-n 抑制自动打印pattern space,sed默认输出全部,-n用于取消默认输出
-i 编辑文件
-r 支持扩展正则表达式

1.改:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjxpwf.html