一、什么是正则表达式
正则是一串有规律的字符串
正则是表写变成语言所必须,可以实现很多比较复杂的需求。
grep、sed、awk是shell三剑客
二、相关命令
1.grep
过滤关键词
-c 行数
-i 不区分大小写
-n 显示行号
-v 取反 不显示关键词内容
-r 遍历所有目录
-A 后面跟数字,过滤出符合要求的行以及下面的n行
-B 后面跟数字,过滤出符合要求的行以及上面的n行
-C 后面跟数字,过滤出符合要求的行以及上下面的n行
例子
grep -n 'root' /etc/passwd
grep -nv 'nologin' /etc/passwd
grep '[0-9]' /etc/passwd 过滤出passwd中含有0-9任何一个数字的行
grep -v '[0-9]' /etc/passwd 过滤出passwd中不含数字的行
grep -v '^#' /etc/passwd ^是以***开头 过滤出不是以#开头的行
grep -v '^#' /etc/passwd | grep -v '^$' 过滤出不以#和$开头的行
grep‘^[^0-9]’ [^0-9] 表示非数字,此时的^表示 非
grep '^[^a-zA-Z]' test.txt 过滤出不是以字母开头的行
grep ‘r.o’ r.o中的.表示任意的字符,即r和o中间可以有任意个任意字符
grep ‘o*o’ o*o中的*表示*左边的字符可以重复N次
grep ‘.*’ .*表示任意个任意字符
grep ‘o\{2\}’ /etc/passwd {}表示范围 需要配合脱意符\,或者使用egrep
o\{2\} 表示两个o,如果不想使用脱意符可以使用egrep或者grep -e;()表示整体
egrep -e ‘o+o’ passw d +的意思+前面字符一次或多次(不包括0)
egrep ‘oo?’ passwd ?表示?前面字符的0次或一次
egrep ‘root|nologin’ /etc/passwd |表示或者
egrep '(oo){2}' /etc/passwd 过滤含有oooo的行
2.sed
查找-替换——用于替换指定的字符
sed -n '/root/'p test.txt 查找root字符
sed -e '1'p -e '/111/'p -n test.txt
sed -n '/bus/'Ip test.txt 匹配bus,I表示不区分大小写
sed '1,10s/root/toor/g' test.txt 将1-10行中的root 换成toor
head test.txt | sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1'
第一个([^:]+)表示任意多个非:的字符,
.*表示任意个任意字符,
第二个([^:]+)表示任意多个非:的字符,
以上命令将文本内容定义为三段,\3:\2:\1的意思为将第一段位置更改到最后将第三段位置更改到最前
-r 可以不使用脱意符
-e 执行多个操作,可以写多个
$ 表示末行
-d 删除指定行(不更改文件实际内容)