linux 命令系列之 正则表达式和通配符(53)

来源:互联网 发布:吴知力图片 编辑:程序博客网 时间:2024/05/16 05:23
1.正则和通配符的区别
正则表达式是用来在文件中匹配符合条件的字符串,增值是包含匹配。grep,awk,sed等命令都支持正则表达式
通配符是匹配符合条件的文件名,通配符是完全匹配,ls,find,cp 不支持正则表达式,只能使用shell自己的通配符来进行匹配


2.基础正则表达式
元字符 作用
* 前一个字符匹配0或任意多次
. 匹配除换行符外的任意一个字符
^ 匹配行首,例如:^hello会匹配以hello开头的行
$ 匹配行尾,例如:hello$会匹配以hello结尾的行
[] 匹配中括号中任意一个字符,只匹配一个。例如:[0-9]匹配任意一个数字,[a-z],[0-9]匹配一个小写的字母和一个数字
[^] 匹配大括号以外的任意一个字符。例如:[^0-9]匹配非数字
\ 转义符。用于取消特殊符号的意义
\{n\} 表示前面的数字恰好出现n次,例如:[0-9]\{4\}匹配4位数数字,[1][3-8][0-9]\{9\n}
\{n,\} 表示其前面的字符出现不小于n次,例如:[0-9]\{2,\}表示两位数及两位数以上
\{n,m\} 表示其前面的字符只是出现n次,最多出现m次,例如:[a-z]\{6,8\}匹配6到8的小写字母

"*" 匹配0或多个字符
grep "a*"  test.txt    ////匹配所有内容,包括空白行
grep "aa*"  test.txt////匹配至少包含一个a的行
grep "aaa*" test.txt/////匹配连续2个a的字符串
grep "aaaaa*"  text.txt  ////匹配连续4个a的字符串

"."匹配一个字符
grep "s..d" test.txt  //// 匹配在s和d两个字母之间一定有两个字符的单词
grep  "s.*d" test.txt  ///// 匹配s和d字母之间有任意字符
grep  ".*"   test.txt  ////  匹配所有内容  

"^" 匹配行首,"$"匹配行尾
grep  "^M" test.txt  ////匹配以M开头的行
grep  "n$"  test.txt  ////匹配以n结尾的行
grep  -n  "^$"  test.txt  /////匹配空白行,输出行号

"[]"匹配中括号中间的任意一个字符,只匹配一个
grep "s[ao]id" test.txt  ////匹配 said 或soid
grep "[0-9]" test.txt  ///匹配任意一个数字
grep  "^[a-z]" test.txt ///// 匹配以小写字符开头的行




"[^]"匹配除中括号的字符以外的任意一个字符
grep "^[^a-z]" test.txt  //////不以小写字符开头的行
grep "^[^a-zA-Z]" test.txt /////不以字母开头的行 


"\" 转义符
grep "\.$" test.txt  ////匹配以.结尾的行




"\{n\}" 表示其前面的字符恰好出现n次
grep "a\{3\}" test.txt /////匹配a字母连续出现3次的字符串
grep "[0-9]\{3\}" test.txt ///匹配连续出现3个数字的字符串



"\{n,\}"前面的字符出现次数不小于n
grep "^[0-9]\{n,\}[a-z]" test.txt 匹配至少以3个数字开头的字符串



"\{n,m\}"匹配其前面的字符至少出现n次,最多出现m次
grep "sa\{1,3\}i" test.txt ////匹配字母s和i之间最少一个a,最多三个a
0 0
原创粉丝点击