正则表达式

仅可以被三剑客(grep/egrep,sed,awk)命令支持

正则表达式与特殊字符有本质区别

基础正则表达式BRE

给要过滤的内容添加标识,然后把符合标识显示出来

^   以....开头 ^d
grep ^I oldboy.txt   I开头的行
$   以...结尾   $d
 grep m$ oldboy.txt  m结尾的行
ls -lF ~|grep /$
grep ".$" oldboy.txt  #匹配以任意一个字符结尾的行
^$  表示空行
grep ^$ oldboy.txt  空行
. 点号  匹配任意一个且只有一个字符(不可空行)
grep . oldboy.txt 
\   转义字符,让有特殊含义的失去意义,显出原型
grep "\." oldboy.txt 匹配带点的行
grep ".$" oldboy.txt  匹配以任意一个字符结尾的行
grep "\.$" oldboy.txt 匹配以点结尾的行
*  重复前一个字符(连续出现)   0次或N次
grep "0/00*" oldboy.txt 0*可以没有0   00*至少一个0
重复0次的时候,表示啥也没有(空),即匹配所有内容
.*   匹配所有内容
grep ".*" oldboy.txt
^.* 以任意多个字符开头
.*$ 以任意多个字符结尾
[abc] 中括号  匹配abc中的任意一个字符[^a]取反

扩展的正则 (ERE) grep -E ===egrep

+   匹配前一个字符1次或多次   和*区别. *可以匹配0次
egrep "0+"  oldboy.txt 1个0或多个0
[:/]+            匹配:或/字符一次或多次
egrep "[:/]+" oldboy.txt
egrep "[:/]" oldboy.txt 
egrep -o  只输出匹配的内容   一个结果一行 (竖着显示)
?   匹配前一个字符0次或1次  
egrep "0?" oldboy.txt 
|   表示或者,同时匹配多个字符串
egrep "000|oldboy" oldboy.txt
()   括起来的东西表示一个整体 ()里的内容可以被\n引用,n为数字,表示引用第几个括号的内容
\n 引用前面()里的内容
\1第一个括号里的内容
\2第二个括号里的内容
egrep "(0)(0)\1\2" oldboy.txt 

a{n,m}   匹配前一个字符最少n次,最多m次
a{n,}                最少n次
a{n}                 刚好n次
a{,m}                最多m次
egrep "0{3,4}" oldboy.txt 
egrep -o 横竖转换

sed命令(老二)

sed -n 取消命令的默认输出 
sed -i 修改文件内容
's###g' ——全局替换
's###' ——替换每行第一个
sed -p取行
sed -e 允许多次编辑
参数
p   打印输出(与n配合)
sed -n  '2,3p' 取文件2到3行
sed -n  '3p'  第3行
sed -n  '/old/p'  有old的行
sed -n  '/old/d'  删除有old的行

特殊预定义表达式(不重要)

使用方法 +[]
[[:alnum:]]		匹配任意一个字母或数字字符,相当于[a-zA-Z0-9]	
[[:alpha:]]		匹配任意一个大小写字母字符,相当于[a-zA-Z]	
[[:blank:]]		空格与制表符(横向和纵向)	
[[:digit:]]		匹配任意一个数字字符,相当于[0-9]	
[[:lower:]]		匹配小写字母,相当于[a-z]	
[[:upper:]]		匹配大写字母,相当于[A-Z]	
[[:punct:]]		匹配标点符号	
[[:space:]]		匹配一个包括换行符、回车等在内的所有空白符	
[[:graph:]]		匹配任何一个可以看得见的且可以打印的字符	
[[:xdigit:]]	任何一个十六进制数(即:0-9,a-f,A-F)	
[[:cntrl:]]	    任何一个控制字符(ASCII字符集中的前32个字符)	
[[:print:]]		任何一个可以打印的字符	
posted on 2021-06-09 19:17  晨曦日出  阅读(48)  评论(0编辑  收藏  举报