正则表达式用来在文件中匹配符合条件的字符串 正则是包含匹配 grep awk sed等命令可以支持正则

通配符用来匹配符合条件的文件名。通配符是完全匹配,ls find cp 命令不支持正则,只能shell通配符匹配


 

通配符

- *  匹配任意多个字符
- ? 匹配任意一个字符
- [] 匹配括号中任意一个字符
- () 在子shell中执行
- {} 集合 touch file{}
- \  转义符

cp -rv /etc/sysconfig/network-scripts/{ifcfg-eth0,ifcfg-eth0.old}
cp -rv /etc/sysconfig/network-scripts/ifcfg-eth0{,.old}

- grep "aa*" xx.log             解析:  因为*是匹配前一个字符0次或多次   匹配最少有一个a的行    
- grep "s..d" xx.log            解析:  .只匹配一个非换行符的字符,如果s和d之间只有1个字符,则不匹配
- grep "^$" xx.log              解析: ^是以什么开头 $是以什么结尾  ^$组合就是空白行的意思  打印看不到 就加个-n
- grep "^[0-9]" xx.log          解析: 中括号的意思是匹配中括号内任意一个字符 加上^意思就是匹配数字开头的行 0-9就是0到9任意数
- grep "^[^a-zA-Z]" xx.log      解析: ^在括号里的意思是匹配取反,意思是不要a-z和A-Z,加上括号外^,就是不以小写字母开头的
- grep "\.$" xx.log             解析: \是转义符 意思让.有实际意义 意思是去.结尾的行
- grep "a\{3\}" xx.log          解析: \{n\}表示其前面的字符恰好出现n次  注意 3和3,是有区别的, 3,代表3次
- grep "sa\{1,3\}" xx.log       解析: 匹配前边的字符至少1次,之多3次           

ls -l file[1-13].txt       # 先匹配1-1 再匹配3
ls -l file[2-14].txt       # 只能匹配出4
ls -l file[1-10].txt       # 只能匹配1
ls -l file[0-9,10,11].txt  # 只匹配1到9
ls -l file[!0-4].txt       # 反选1234
ls -l file{1,3,11,13}.txt  # 匹配1 3 11 13

 

正则表达式

- regular expression
- linux python golang支持正则表达式
- 应用场景 过滤有规律的内容 尤其是日志

- 注意事项
| 所有的符号 英文符号
| 学习正则 通过grep命令学习 用的时候grep,后边加上单引号
| 给grep egrep加上颜色 alias grep='grep --color=auto' alias egrep='egrep --color=auto'
| 注意系统的字符集 en_US.UTF-8(大部分情况90%没问题)如果出现问题修改字符集为C export LANG=C
| 快速掌握正则:需要配合grep -o参数学习

- 正则的分类
| 基础正则(BRE)    ^ $ ^$ . * .* [a-z] [^abc]
| 扩展正则(ERE)    + | () {} ?

- 正则vs通配符
| 1.正则用途 三剑客 高级语言 进行过滤(匹配字符)
| 2.三剑客 expr rename支持正则
|
| 1.通配符(pathname extension glob)    匹配文件(文件名) *.txt *.log  
| 2.linux下大部分命令都可以用

元字符

- 1. ^ 行首定位符       // 以什么开头 

- 2. $ 行尾定位符       // 以什么结尾
| cat -A 文件名         // 会看到行尾有$

- 3. ^$ 表示空白行
| cat -v "^$" 排除空行

- 4. . 匹配单个字符     // 表示任意一个字符,不匹配空白行

- 5. * 匹配前导符0到多次

- 6. .* 任意多个字符 在正则里表示所有内容 

- 7. [] 匹配指定范围内的一个字符    // [lL]ove

- 8. [-] 匹配指定范围内的一个字符   // [a-zA-Z]ove

- 9. [^] 匹配不在指定组内的字符     // [^a-zA-Z]ove

- 10. \ 转义字符 脱掉马甲马甲打回原形 去除原有特殊含义
| 转义字符序列: \n 回车换行  \t tab键

- 11. \< 词首定位符          
- 12. \> 词尾定位符

- 13. \(..\) 匹配稍后使用的字符的标签

- 14. x\{m\}   字符x重复出现m次
- 15. x\{m,\}  字符x重复出现m次以上
- 16. x\{m,n\} 字符x重复出现m到n次

- 扩展正则部分,支持扩展:egrep / sed -r / awk / grep -E
| 1. +  前一个字符出现1次或多次
| 2. |  可以匹配一个字符或多个字符  见下图
| 3. () 被括起来的内容表示一个整体;后向引用(反向引用 sed)
| 4. {} 前面字符出现次数         // 扩展正则,两种括号都不用加 \
| 5. ?  前一个字符出现0次或1次

- 正则特色 贪婪匹配 ".*"或"*"连续出现的时候,表现出仅可能贪婪匹配

- 2* 2出现0次或多次;0次相当于什么都没有;所以2*就是所有都出来了

- egrep -o "[a-Z]+" 匹配出所有单词

hdfs正则匹配改文件名 shell正则匹配文件名_正则表达式


 

bash的引号

- 双引号 会把引号的内容当成整体来看待 允许通过$符号引用其他变量值
- 单引号 会把引号内容当成整体来看待,禁止引用其他变量值 shell中特殊符号都被视为普通字符
- 反撇号 反撇号和$()一样,引号或括号里的命令会优先执行 如果存在嵌套 反撇号不能用

hdfs正则匹配改文件名 shell正则匹配文件名_正则表达式_02

echo "$(date +%F)"  == echo "`date +%F`"