Linux:shell脚本:基础使用(4)《正则表达式-grep工具》_shell grep 全角字符串-CSDN博客https://blog.csdn.net/w14768855/article/details/132338954?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170833601716800226594687%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=170833601716800226594687&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-132338954-null-null.nonecase&utm_term=grep&spm=1018.2226.3001.4450这个是grep的基础使用,本章则搭配着正则表达式之上再加更多的参数进行演示
基础正则表达式
^word 搜索以word开头的。vi/vim中 ^ 一行的开头。
word$ 搜索以word结尾的。vi/vim中 $ 一行的结尾。 \$
^$ 表示空行
. 代表且只能代表任意一个字符
\ 例:\. 只代表点本身,转义符号,让有特殊身份意义的字符,脱掉马甲,还原;
\n 换行符
\r 匹配回车
\w 匹配任意一个字符和数字
* 重复0次或多次前面的一个字符。
* 匹配所有字符。例:^.* 以任意多个字符开头,.*$以任意多个字符结尾。
[abc] 匹配字符集内的任意一个字符。
[^abc] 匹配不包含 ^ 后的任意字符的内容。中括号里的 ^ 为取反。
[1-9] 表示匹配括号内的范围内的任意字符。
a\{n,m\} 重复n到m次前一个重复的字符。若用egrep、sed -r可以去掉斜线。
\{n,\} 重复至少n 次前一个重复的字符。若用egrep、sed -r可以去掉斜线。
\{n\} 重复n 次前一个重复的字符。若用egrep、sed -r可以去掉斜线。
\{,m}\ 重复少于m次。
扩展的正则表达式:
+ 重复一次或一次以上前面的一个字符。等同于\{n,}
? 重复0次或一次前面的一个字符。等同于\{,m}
| 或者的意思,用或的方式查找多个符合的字符串。
() 找出括号内的字符串。
理解正则
^linux ##以linux开始
linux$ ##以linux结束
linuxfan. ##匹配linuxfans等
coo[kl] ##匹配cool或cook
9[^5689] ##匹配91,92等,但不匹配95,98等
[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 /etc/passwd | grep -e root -e tarro -e ftp
# 查询/etc/passwd 多个字符串 -e 后面就是一个指定的字符串可以指定多个
grep -R -o -n -E '[a-z0-9_]+\@[a-z0-9_]+\.[a-z]{2,4}' /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显示不匹配的文件名
cat /etc/passwd |grep -c bash$
统计系统中能登录的用户的个数,以bash结尾的个数
ip a |grep -E '^[0-9]' |awk -F : '{print^C2}'
获取系统中网卡名称
ip a |grep mtu|grep -o -E "[a-z]{3}[0-9]{1,}"
也是获取系统中网卡名称
ifconfig ens33 |grep -E -o 'inet [^ ]*' |grep -o '[0-9.]*'
获取指定网卡的ip地址
ip a |grep inet |grep ens33 |grep -o "inet[^/]*" |grep -o "[0-9.]*"
获取指定网卡的ip
ifconfig ens33 |grep -i ether |awk '{print $2}'
截取指定网卡的mac地址
cat 123 | grep -A 3 5
查找指定字符串并且连续显示向下3行
cat 123 | grep -B 3 5
查找指定字符串并且连续显示向上3行