首页 > 代码库 > 笔记7 正则(grep、sed、awk工具)

笔记7 正则(grep、sed、awk工具)

正则
含义:就是一串有规律的字符串


grep


用来过滤指定关键词的
格式:grep后边跟关键词在跟文件名
-c 显示行数

技术分享

-i 不区分大小写,加上-i它会把大写的显示出来
技术分享

-n 显示行号

技术分享

-v 取反,意思就是把你指的关键词之外的全显示出来,例如我一开始指定要带nologin的,加上-v之后就会显示不带有它的,如图。

技术分享

-r 把一些子目录或者孙目录所有下边的文件遍历一遍
-A后面跟数字,过滤出符合要求的行以及下面的n行,意思就是比如你要过滤关键词root,加上-A2,它会给你把只要有root关键词的这一行加上往下的两行一起列出来,如下图。

技术分享

-B跟A相反,过滤出符合要求的行以及上面的n行

技术分享

-C全是AB的结合,过滤出符合要求的行以及上下各n行

技术分享


grep ‘[0-9]‘ 表示过滤0-9的数字,例如,grep ’[0-9]‘ passwd 如下图

技术分享

 grep -n ‘^#‘   意思是以#号开头的行

技术分享

 grep -vn ‘^#‘ 意思是不以#号开头的行

技术分享

 grep ‘[^0-9]‘  把里边非0-9的列出来

技术分享

 grep ‘^[^0-9]‘ 以一个非数字开头的行全部列出来

技术分享

 grep  -v ‘^[^0-9]‘相反的行

技术分享 grep ‘r.o‘ .表示任意的一个字符

技术分享

 grep ‘o*o‘ *表示0个过多个*前面的字符

技术分享

 grep ‘.*‘表示任意一个任意字符

 grep ‘o\{2\}‘ 一样的命令还有egrep ‘o{2}‘   grep  -E ‘o{2}‘花括号表示前面这个字符的重复范围

技术分享

 egrep ‘o+o‘ 意思是加号前面这个字符的一次或多次

 egrep ‘o?t‘ 表示问号前面这个字符的重复次数为零或者一

技术分享

 grep -E ‘root | nologin‘ 竖线是或者的意思

技术分享


sed


sed -n 只匹配一个指定字符例如,
sed -n ‘/root/‘p test.txt  只匹配有root字符的行
sed -r 加上r之后就不用拖一了,例如,sed -nr ‘/o+t/‘p test.txt
sed -nr ‘/o{2}/‘p test.txt匹配两次o
sed -n ‘5‘p test.txt  打印指定的行
sed -n ‘1,5‘ p test.txt 打印指定范围的行
sed -n ‘1,$‘p test.txt 打印指定的行到末尾的行,$末尾行的意思
sed -n ‘/root/‘p test.txt 
sed -n ‘/^ 1/‘p test.txt 
sed -n ‘in$‘p test.txt 
sed -n ‘/r..o/‘p test.txt 
sed -n oo* p test.txt 
sed -e 在同一个表达式里边做多项操作,例如,我不仅要把几行打印出来还要匹配字符串:sed -e ‘1‘p -e /bus/ ‘ p -n test.txt 

技术分享

 在p后边加上大i就不会区分大小写了sed -e ‘1‘p -e /bus/ ‘ pI -n test.txt
怎么删除行,加d选项,例如
 sed ‘1,10‘d test.txt 意思是把一到十行删除,但是他并没有删除,只是把剩下的行给列出来
 set -i 这个是删除选项,例如删除指定行sed  -i ‘1,10‘d test.txt 删除指定字符的行  sed -i ‘/user2/‘d test.txt
 替换需要加s,g意思是全局替换,例如:sed ‘1,10s/root/toor/g‘ test.txt
意思是把一到十行里的root替换成toor 如下图

技术分享

 删除英文字母:sed ‘s/[a-zA-Z]//g‘如下图

技术分享

 出现两个//时它会报错我们需要加上\,例如:sed ‘s//root/123/g‘换成sed ‘s/\/root/123/g‘  如下图:

技术分享

 在所有的行前面加上一个固定的字符串如下图:

技术分享

 如何把第一段和最后一段调换位置,如下图:

技术分享


awk


 把第一段打印出来:awk -F ‘:’ ‘{print $1}’ test.txt 如下图:

技术分享

打印所有的段用0表示:awk ‘:’ ‘{print $0}’ test.txt

打印指定更多的段:awk -F ‘:’ ‘{print $1,$2,$3}’ test.txt

列出指定的字符,例如oo:awk ‘oo‘ test.txt

技术分享

只要第一段带oo的:awk -F ‘:’ ‘$1 ~ /oo/’ .test.txt

技术分享

多个表达式一起写:awk -F ‘:‘ ‘/root/ {print $1,$3} /test/ {print $1,$3}‘ /etc/passwd

查找第三段等于0行:awk -F ‘:‘ ‘$3=="0"‘ /etc/passwd

查找某一段大于等于500的:awk -F ‘:‘ ‘$3>="500"‘ /etc/passwd

!=意思就是不等于:awk -F ‘:‘ ‘$7!="/sbin/nologin"‘ /etc/passwd

还可以把第几段小于第几段的列出来:awk -F ‘$3<$4’

技术分享

相等的段也可以列出来:awk -F ‘$3=$4’

技术分享

还可以把一段大于几并且小于几的一同列出来:awk -F ‘$3>“5” && $3<“7”’

技术分享

||是或者的意思:awk -F ‘:‘ ‘$3>"5" || $7=="/bin/bash"‘ /etc/passwd

技术分享

OFS是在你打印的时候指定的分隔符。例如:

awk -F ‘:’ ‘{OFS=“#”}{if ($3>1000) {print $1,$2,$3,$4}’

技术分享NR表示打印时的行:awk -F ‘:‘ ‘{print NR“:”$0}‘ 显示行号的意思,把所有的行打印出来。

技术分享

NF表示打印是的段:awk -F ‘:‘ ‘{print NF“:”$0}‘

技术分享

只要前十行:awk -F ‘:’ ‘NR<=10’

计算某个段落的总和:awk -F ‘:‘ ‘{(tot=tot+$3)}; END {print tot}‘ /etc/passwd END表示所有的行都已经执行。


本文出自 “12912638” 博客,请务必保留此出处http://12922638.blog.51cto.com/12912638/1949770

笔记7 正则(grep、sed、awk工具)