• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

day13通配符 (* {} [] [^] ? )与正则表达式(^ $ ^$ . * .* [] [^] | + {} () ?)与特殊符号( '' "" “ )

开发技术 开发技术 3小时前 2次浏览

通配符 vs 正则———主要是处理目标和支持的命令不同
通配符①文件/目录 文件名 处理的是参数②Linux大部分命令都可以使用
正则①过滤/在一个文件中查找内容,处理的是字符②Linux三剑客,开发语言python,Golang,java…..
通配符
一. 通配符—匹配参数,匹配文件/目录名字 *.txt *.log
* {} [] [^] ?

1、通配符符号 *号—所有
#01 找出当前目录下面以.txt结尾的文件ls *.txt
#02 找出/etc/下面以.conf结尾的文件find /etc -type f -name “*.conf”
#03 找出系统中包含oldboy的文件 find /etc/ -type f -name ‘*oldboy*’

2、通配符 {}—生成序列-数字与字母
#01 [root@oldboy79-01 ~]# echo {01..10}
01 02 03 04 05 06 07 08 09 10
#02 [root@oldboy79-01 ~]# echo {a..z}
a b c d e f g h i j k l m n o v w x y z
#03 了解 生成序列 有规律的序列
[root@oldboy79-01 oldboy]# echo {1..10..2}
1 3 5 7 9
[root@oldboy79-01 oldboy]# echo {a..z..2}
a c e g i k m o q s u w y
#04备份文件
[root@oldboy79-01 oldboy]# cp oldboy.txt{,.bak}
cp: overwrite ‘oldboy.txt.bak’? y
[root@oldboy79-01 oldboy]# echo A{,B}
A AB

3、?—任何一个字符
[root@oldboy79-01 ~]# ls /bin/?
/bin/w
[root@oldboy79-01 ~]# ls /bin/??
/bin/ar /bin/cc
二. 特殊符号—–引号系列
单引号— –所见即所得,单引号里面的内容会被原封不动输出(大部分命令)
双引号—–与单引号类似,双引号的里面的特殊符号会被解析运行, “ 反引号 $() $
不加引号—与双引号类似,支持通配符
反引号—–优先执行反引号里面的命令
例子:[root@oldboy79-01 ~]# echo ‘oldboy-lidao $LANG `hostname` $(whoami) {1..5} ‘
oldboy-lidao $LANG `hostname` $(whoami) {1..5}
[root@oldboy79-01 ~]# echo “oldboy-lidao $LANG `hostname` $(whoami) {1..5} ”
oldboy-lidao en_US.UTF-8 oldboy79-01 root {1..5}
[root@oldboy79-01 ~]# echo oldboy-lidao $LANG `hostname` $(whoami) {1..5}
oldboy-lidao en_US.UTF-8 oldboy79-01 root 1 2 3 4 5

三. 正则表达式
1、正则概述
主要用来进行匹配字符(三剑客过滤文件内容)
匹配字符: 手机号,身份证号码 18位 数字(最后一位可能是字母X)
通过正则表达式匹配内容: 文件每行开头或每行结尾,或…..需求/
2、注意事项
所有符号都是英文
刚开始学习的时候推荐使用grep或re.oldboylinux.cn显示,正则执行过程或匹配了什么内容
注意系统的语言与字符集(了解)
3、正则分类
基础正则 ^ $ ^$ . * .* [] [^]
扩展正则 | + {} () ?
4、基础正则
#01 ^ 以….开头的行 以my开头的行# grep ‘^my’ /oldboy/re.txt
#02 $ 以…..结尾的行 # grep ‘m $’ /oldboy/re.txt
#03 ^$ 匹配空行,没有任何符号的行 # grep -n ‘^$’ /oldboy/re.txt
排除文件中的空行grep -v ‘^$’ /etc/ssh/sshd_config
#grep -v ‘^$’ /etc/ssh/sshd_config |grep -v ‘#’
#04 . (点) 任意一个字符开头的行# grep ‘^.’ /oldboy/re.txt
过滤出文件中以.(小数点)结尾的行# grep ‘.$’ /oldboy/re.txt
( 撬棍 转义字符 脱掉马甲,打回原形,去掉特殊含义 n回车换行 t 制表符)
#05 * 前一个字符连续出现0次或0次以上# grep ‘0*’ /oldboy/re.txt
(贪婪性 #正则表达式表示连续出现或所有的时候,会出现尽可能多的匹配)
#06 .* 所有 匹配出 以所有(任意内容)开头到o内容# grep ‘^.*o’ /oldboy/re.txt
贪婪性 匹配出文件中以n开头并且以.结尾的行grep ‘^n.*.$’ /oldboy/re.txt
#07 [] [abc] 匹配字符a或b或c,中的任意一个,[]中括号表示1个整体相当于是1个字符
# grep ‘[abc]’ re.txt
#02 匹配数字# grep ‘[0-9]’ re.txt
#03 大小写字母# grep ‘[a-z]’ re.txt #grep ‘[a-Z]’ re.txt
#04 匹配大小写和数字#grep ‘[0-9a-zA-Z]’ re.txt #grep ‘[0-Z]’ re.txt
#05 匹配文件中以大写字母开头的行
#使用正则建议 题目/工作要求—>正则
要求: 1. 大写字母—>[A-Z] 2. 开头——->^
组合: ^[A-Z]
命令: # grep ‘^[A-Z]’ re.txt
#06 匹配文件中以以大写字母开头并且以小写字母或空格结尾的行
# grep ‘^[A-Z].*[a-z ]$’ re.txt
#08 [^] 取反排除 [^abc] 匹配不是a,不是b,不是c的内容(排除abc),一个整体相当于是1个字符 # grep ‘[^abc]’ re.txt 看过
程 # grep -o ‘[^abc]’ re.txt |head -20

5、 扩展正则
1.+ 前一个字符连续出现1次或1次以上(more times)
#01 过滤出连续出现的0 # egrep ‘0+’ re.txt # grep -E ‘0+’ re.txt # grep ‘0+’ re.txt
#02 过滤出连续出现的数字# egrep ‘[0-9]+’ re.txt
#03 过滤出连续出现的字母
条件: 1. 字母(大小) [a-zA-Z] [a-Z]
2. 连续出现 +
命令# egrep ‘[a-Z]+’ re.t # egrep ‘[a-Z]’ re.txt
2) | 或者 区别与[a-z]过滤的是字母
#01 oldboy或linux # egrep ‘oldboy|linux‘ re.txt #过滤的是单词
3) {} a{n,m} 前一个字符a,连续出现至少n此,最多出现了m次
#01 匹配数字0,出现了至少1次,最多3次数字0 # egrep ‘0{1,3}’ re.txt
#02 匹配连续出现3次的数字0 # egrep ‘0{3}’ re.txt
#03 匹配身份证号码
条件 1. 18位
2. 前17位是数字 [0-9]{17}
3. 最后1位是数字或X [0-9X]$
4.合并 [0-9]{17}[0-9X]$
5.命令 #egrep ‘[0-9]{17}[0-9X]$’ id.txt
4) () 被括起来的内容相当于是一个整体;sed命令的后向引用(反向引用)
#01 取出文件中的oldboy或oldbey
# egrep ‘oldboy|oldbey’ re.txt
# egrep ‘oldbo|ey’ re.txt
# egrep ‘oldb(o|e)y’ re.txt
5) ? 前一个字符出现0次或1次
#01 gd或god # egrep ‘gd|god’ qa.txt
# egrep ‘go?d’ qa.txt
正则总结
出现(连续出现/重复
+–1次及多次 {}—任意次 范围
*—-0次及多次 ? —-0或1次
整体(或者)
[] —-[abc] ()—整体
[^]—[^abc] |—-或者


喜欢 (0)