正则(re)
cat oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
^ 以什么开头 grep ’^I‘ oldboy
$ 以什么结尾 grep ’my &‘ oldboy
^$ 空行,空行指这一行中没有任何内容(空格也是符合),空格也是字符
grep -nv '^$' oldboy.txt -v:排除 -n 显示行号
.(点) 任意一个字符 ,不匹配空行
grep ’\.$‘ oldboy.txt
\ 转移字符,去除字符特殊含义
* 前一个字符连续出现0次或0次以上
.* 所有内容
grep ’^.*t‘ oldboy.txt
正则特色,贪婪
[] [abc] 1次匹配1个字符,匹配任何一个字符(a或b或c)
grep -o ’[abc]‘ oldboy.txt -o:显示匹配过程
[a-zA-Z0-9][a-Z0-9]:大小写加数字
grep -i ’[a-z0-9]‘ oldboy.txt
[a-z|A-Z|0-9]:[]里面的内容去掉特殊含义
[^] [^abc] 取反,排除abc内容
基础正则 | 含义 | 搭配 |
---|---|---|
^ | 以…开头的行, | ^oldboy |
$ | 以…结尾的行 | lidao$ |
^$ | 空行 | ^$ |
. | 任意一个字符 | |
* | 前一个字符连续出现(重复)0次或0次以上 | |
.* | 所有内容 | |
\ | 转义字符 | \t \n |
[] | 一个整体,匹配任意一个字符 | [abc] a或b或c |
[^] | 取反排除 | [^abc] |
正则贪婪性 |
扩展正则
+ 前一个字符出现了一次或多次
egrep ’0+‘ oldboy.txt
grep -E '0+' oldboy.txt
egrep -o '[0-9]+' oldboy.txt
| 或者
[] | 的区别
[] :一次匹配一个字符
| :一次匹配一个字符或多个
() 括起来的内容,表示一个整体,后向引用(反向引用)
{} 连续出现 o{n,m} 前一个字母o,至少连续出现n次,最多连续出现m次
? 连续出现,前一个字符出现0次或1次
grep
sed
sed -n ‘1314p’ access.log
sed -nr ‘/[0-9]+/p’ oldboy.txt
echo 123456 | sed -r ‘s#(.*)#<\1>#g’
https://jex.im/regulex/#!flags=&re=%5E.t(.)%2F.*%24
awk
#取第5和第9列
ls -l | awk ‘{print $5,$9}’ | column -t
awk -F: -vOFS=: ‘{print $NF,$2,$3,$4,$5,$6,$1}’ /etc/passwd | column -t
取网卡ip
ip a s eno1np0 | awk ‘NR3’ | awk -F “[ /]+” ‘{print $3}’
ip a s eno1np0 | awk -F"[ /]+" 'NR3{print $3}’
awk ‘BEGIN{a[0]=12306;a[1]=“lidao”;a[2]=“oldboy”;for(i in a) print i,a[i]}’
# 处理以下文件内容,将域名取出并根据域名进行计数排序处理:(百度和sohu面试题)
http://www.etiantian.org/index.html
http://www.etian.tian.org/1.html
http://post.etian.tian.org/index.html
http://mp3.etiantian.org/index.html
http://www.etiantian.org/3.html
http://post.etiantian.org/2.html
awk -F"[/.]+" ‘{print $2}’ url.txt
awk -F"[/.]+" ‘{array[$2]++}END{for(i in array)print i,array[i]}’ url.txt
awk -F"[/.]+" ‘{array[$2]++}END{for(i in array)print i,array[i]}’ url.txt | sort -rnk2
#统计磁盘空间的使用率
df -h | awk -F"[ %]+" ‘NR>1{if($5>=70)print “disk not enough”,$0}’
面试题:统计这段语句中,单词中字符数小于6的单词,显示出来
echo I am oldboy teacher welcome to oldboy training class.
echo I am oldboy teacher welcome to oldboy training class. | awk ‘{for(i=1;i<=NF;i++) print $i}’
(max) [chenzj@user src]$ echo oldboy lidao | awk '{print length()}'
12
(max) [chenzj@user src]$ echo oldboy lidao | awk '{print length($1)}'
6
(max) [chenzj@user src]$ echo oldboy lidao | awk '{print length($2)}'
5
echo I am oldboy teacher welcome to oldboy training class. | awk ‘{for(i=1;i<=NF;i++) if(length($i)<6)print $i}’
参考文献
https://blog.oldboyedu.com/category/linux-commands/