正则入坑-2--正则在awk、grep以及find等中的使用案例

1、sed
对文档中目录名进行替换
#sed -e 's/\/home\/sxzhou/\/home\/SXZHOU/' < sed.txt
  
2、find
查找文件格式是txt和jpg格式的文件
#find . ( -name ".txt" -o -name ".jpg" ) -print
   
3、grep
3.1、 利用''对字段过滤
递归目录过滤字段
#grep 'aaaa' -R
   
3.2、利用[]对集合字符过滤
用^符号做[]内的前缀,表示除[]内的字符之外的字符
  
过滤以大写字母开头的行
#grep -n '^[A-Z]' 1.txt
   
搜索ooo前没有g的字符串所在的行
#vi test.txt
sxzhou
sxzhouooo
sxzhogooo
ooosxzhou
SXZHOU
   
#grep "[^g]ooo" test.txt
sxzhouooo
   
搜索开头不是英文字母的行
#vi test.txt
sxzhou
sxzhouooo
sxzhogooo
ooosxzhou
SXZHOU
123ndfkjd
   
#grep "^[^a-zA-Z]" test.txt
123ndfkjd
   
3.3、行首与行尾字符^$
过滤空行和注释行
#egrep -v "^#|^$" 1.txt
 
3.4、星号
表示有0个或多个 某个字符,点. 代表一个任意字符
过滤包含连续3个字母o的行
#cat test.txt
sxzhou
sxzhouooo
sxzhogooo
ooosxzhou
SXZHOU
123ndfkjd
dfsdjfoo
hdskfho
   
#grep "ooo" test.txt
sxzhouooo
sxzhogooo
ooosxzhou
dfsdjfoo
   
搜索包含s和u之间任意个数的任意字符的字符串所在行.
表示0个或多个任意字符
#cat test.txt
sxzhou
ooosxzh24~ou!
sxzhsdfkhou++
sxzhsdjfouM
sxzh
   
#grep "s.*u" test.txt
sxzhou
ooosxzh24~ou!
sxzhsdfkhou++
sxzhsdjfouM
   
限定连续重复字符的范围 { }
过滤包含连续两个字母o的行
#cat test.txt
sxzhou
sxzhouooo
sxzhogooo
ooosxzhou
SXZHOU
123ndfkjd
dfsdjfoo
hdskfho
   
#grep -n 'o{2}' test.txt
2:sxzhouooo
3:sxzhogooo
4:ooosxzhou
7:dfsdjfoo
  
3.5、过滤有连续两个数字或三个数字的行
#grep -n '[[:digit:]]{2,3}' /etc/passwd

3.6、扩展特殊符号、+、?、|
过滤root和apache用户的shell和UID
#egrep '^\b(root|apache)\b' /etc/passwd | cut -d: -f3,7
   
过滤至少一个空白字符开头的行
#grep "^[[:space:]]+.
" 1.txt
   
过滤字段的行,字段格式为#开头、接着至少一个空白字符、接着至少一个非空白字符
#grep "^#[[:space:]]+[^[:space:]]" 1.txt
   
,表示0个或多个重复字符,也可表示为{0,}
+,表示一个或多个重复字符,也可表示为{1,}
?,于表示0个或一个字符。也可表示为{0,1}
|,表示或关系或
  
()的好处是可以对小组使用+?
等。
过滤以root开头的行
#awk '/^root/' /etc/passwd
 
4、awk
过滤包含500的行,匹配行的第一、二个域加10
#awk -F: '/500/ {print $1,$3+10}' passwd
 
5、正则表示IP地址
正则表示ip地址0.0.0.0到999.999.999.999
"[0-9]{1,3}[.]{3}[0-9]{1,3}"
 
正则表示IPV4的IP
^(25[0-5]|2[0-4]\d|(1\d{2}|[1-9]?\d))(.(25[0-5]|2[0-4]\d|(1\d{2}|[1-9]?\d)){3}$)
分析:
IP分为四段,每段数字范围为0-255,IP地址组成特点:250-255、200-249、0-199
  250-255 表示 25[0-5]
  200-249 表示 2[0-4]\d
  0-199 表示
    0-9 表示 \d
    10-99 表示 [1-9]\d
    100-199 表示 1\d{2}
 
    所以0-199可以表示为 (1\d{2}|[1-9]?\d)
0-255就可以表示为 (25[0-5]|2[0-4]\d|(1\d{2}|[1-9]?\d))
 
6、其他正则应用
从多到少列出每个远程主机的连接数
#netstat -tnu | grep "[0-9]" | tr -s " " ":" | cut -d: -f6 | sort | uniq -c | sort -rn
 

持续更新中....

 
参考:
https://blog.csdn.net/tenfyguo/article/details/6387786

转载于:https://blog.51cto.com/xiaoxiaozhou/2108601

你可能感兴趣的:(正则入坑-2--正则在awk、grep以及find等中的使用案例)