正则表达式
仅可以被三剑客(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:]] 任何一个可以打印的字符