Linux扩展正则表达式
Posted wenrulaogou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux扩展正则表达式相关的知识,希望对你有一定的参考价值。
1. 扩展正则表达式
1.1 +(加号)
+ 表示前一个字符出现1次或1次以上
1.1.1 理解+
要求:取出文件内容连续出现的小写字母
[[email protected] /oldboy]# egrep ‘0+‘ oldboy.txt grep -E===egrep my qq is 49000448 not 4900000448. [[email protected]-lnb /oldboy]# grep -E ‘0+‘ oldboy.txt my qq is 49000448 not 4900000448. [[email protected]-lnb /oldboy]# grep ‘0+‘ oldboy.txt my qq is 49000448 not 4900000448. [[email protected]-50 oldboy]# egrep ‘[a-z]+‘ oldboy.txt 可以用[a-z]+显示单词 内容过多此处不粘贴 [[email protected]-50 oldboy]# egrep ‘[a-z]+‘ oldboy.txt -o -o显示查找过程 am oldboy ##[]与+连用 +会认为[]里面的是一个整体 所以显示为字符组
1.1.2 加+和不加+的区别
[[email protected] /oldboy]# egrep ‘0+‘ oldboy.txt -o 加+号 连在一起的会一起显示 000 00000 [[email protected]-lnb /oldboy]# egrep ‘0‘ oldboy.txt -o 不加+号 单独显示 0 0 0 0 0 0 0 0
1.1 | 或者
1.1.1 理解 |
[[email protected] oldboy]# egrep ‘oldboy|linux‘ oldboy.txt 查找文件中oldboy或者linux的内容 I am oldboy teacher! I teach linux. my blog is http://oldboy.blog.51cto.com our size is http://blog.oldboyedu.com
1.1.2 | 的用法
排除文件中的#和空行
/etc/ssh/sshd_config 排除文件中的#和空行
[[email protected] ssh]# egrep -v ‘^$|#‘ sshd_config
1.1 () (小括号)
()表示一个整体 反向引用/后向引用
sed -r 使用扩展正则
思路:把你想要的内容保护起来 ()
sed 在 ‘s###g‘ 后两个井号之间使用 数字 引用
[[email protected] oldboy]# egrep ‘oldb(o|e)y‘ oldboy.txt 此处表示查找oldboy和oldbey [[email protected]-50 oldboy]# echo 123456|sed -r ‘s#(.*)#1#g‘ 123456 [[email protected]-50 oldboy]# echo 123456|sed -r ‘s#(.*)#<1>#g‘ <123456> 将123456 修改为12<34>56 [[email protected]-50 oldboy]# echo 123456|sed -r ‘s#(34)#<1>#g‘ 12<34>56 点表示任意一个字符,2表示第二个括号。 [[email protected] ~]# echo 123456|sed -r ‘s#(.).(..).(.)#2#g‘ 34
1.1 {}(花括号)
前一个字符至少连续出现了n次 最多连续出现了m次
1.1.1 大括号的不同方法
0{3,6} >=3 <=6 0{3} ==3 0{3,} >=3 0{,6} >=0 <=6
1.1.2 应用方法
[[email protected] oldboy]# egrep ‘[0-9X]{18}‘ id.txt 此处表示{}前面的字符出现了18次 [[email protected]-lnb /oldboy]# egrep ‘0{3,4}‘ oldboy.txt 表示0出现了最少出现3次最多出现4次 my qq is 49000448 not 4900000448. [[email protected]-lnb /oldboy]# egrep ‘0{3}‘ oldboy.txt 表示0出现了3次 my qq is 49000448 not 4900000448.
1.1.3 {} 的用法
取出文件中的身份证号码
[[email protected] /oldboy]# cat id.txt 金 211324198705244720 万 500224197105168312 任 1231231231oldboy 任 3oldboy 任 lidao97303136098 任 alex2197303136098 任 350182197303oldgir 吕 211282199209113038 孔 150000198309176071 邹 371001197412221284 贺 130185200011215926 杜 362522198711278101 向 14052219961008852X [[email protected]-lnb /oldboy]# egrep ‘[0-9X]{18}‘ id.txt #表示0到9和x 一共出现了18次 这样查找不精确 因为单独一个数字出现18次 也可以筛选出来 金 211324198705244720 万 500224197105168312 吕 211282199209113038 孔 150000198309176071 邹 371001197412221284 贺 130185200011215926 杜 362522198711278101 XXXXXXXXXXXXXXXXXX 向 14052219961008852X [[email protected]-lnb /oldboy]# egrep ‘[0-9]{17}[0-9X]‘ id.txt 精确查找 但是还不是最精确的 金 211324198705244720 万 500224197105168312 吕 211282199209113038 孔 150000198309176071 邹 371001197412221284 贺 130185200011215926 杜 362522198711278101 向 14052219961008852X
1.1 ? (问号)
?前一个符号连续出现0次或1次 有或没有
?表示的信息0次或1次表示的内容和{0,1}其实是一样的
第1章 正则表达式坑
1.1 坑1 grep ‘0*‘
会把文件内容都显示出来
0* 0次 没有 grep会把文件内容都显示出来
0次以上 0 00000000000
[[email protected] ~]# grep "0*" clsn.txt 坑1 grep ‘0*‘ 会把文件内容都显示出来 I am clsn teacher! I teach linux. I like badminton ball ,billiard ball and chinese chess! my blog is http://clsn.blog.51cto.com our site is http://www.etiantian.org my qq num is 49000448. not 4900000448. my god ,i am not oldbey,but clsn! [[email protected] ~]# grep -o "0*" clsn.txt 000 00000
1.2 坑2 [oldboy]
[oldboy]查找的内容是o l d b o y 而不是oldboy整体
[[email protected] /oldboy]# grep ‘[oldboy]‘ oldboy.txt 在此处oldboy查找的内容是o l d b o y 而不是oldboy整体 I am oldboy teacher! I teach linux. I like badminton ball ,billiard ball and chinese chess! my blog is http://oldboy.blog.51cto.com our size is http://blog.oldboyedu.com my qq is 49000448 not 4900000448. my god ,i am not oldbey,but OLDBOY! [[email protected]-lnb /oldboy]# grep -o ‘[oldboy]‘ oldboy.txt 显示查找过程 o l d b o y l l b
1.3 坑3 [^#^$] [^$] [^#$]
[]中 $ . 没有特殊含义 类似于转义字符
[[email protected] /oldboy]# cat oldboy.txt 查看文件内容 I am oldboy teacher! I teach linux. I like badminton ball ,billiard ball and chinese chess! +++++\\\!!!!$$$$$$^^^ ####!!!^^^^^[email protected]@@@@#### [[email protected]-lnb /oldboy]# grep ‘[^#^$]‘ oldboy.txt 此处表示排除#^$ 相当于去除了特殊含义 I am oldboy teacher! I teach linux. I like badminton ball ,billiard ball and chinese chess! +++++\\\!!!!$$$$$$^^^ ####!!!^^^^^[email protected]@@@@#### [[email protected]-lnb /oldboy]# grep ‘.$‘ oldboy.txt 此处表示查找以.结尾的 I teach linux. not 4900000448. [[email protected]-lnb /oldboy]# grep ‘[.]$‘ oldboy.txt 此处也表示查找以.结尾的 与意思相同 I teach linux. not 4900000448.
1.4 坑4 grep -v与[^a-z]
[^a-z] 排除按字符 某个字符 某些字符
grep -v [a-z] 排除按行
[[email protected] /oldboy]# grep ‘[^a-z]‘ oldboy.txt [[email protected]-lnb /oldboy]# grep -v ‘[a-z]‘ oldboy.txt
以上是关于Linux扩展正则表达式的主要内容,如果未能解决你的问题,请参考以下文章