Linux之正则表达式及通配符

时间:2022-04-15 21:26:33

正则表达式  用来匹配复合条件的字符串,是包含匹配。grep/awk/sed

.            单个任意字符,除换行符
# egrep "^.oo" /etc/passwd
root:x:0:0:root:/root:/bin/bash
^ 匹配行首
^abc  以abc开头
^#  以#开头
# egrep "^root" /etc/passwd
$ 匹配行尾
abc$  以abc结尾
^$        匹配空白行
# grep "shutdown$" /etc/passwd
+ 最少匹配1次
a+     一个或多个连续的a
(abc)+   一个或多个连续的abc
? 最多匹配1次,包括0次
a?    0个或1个a
(abc)?  0个或1个abc
* 匹配任意次数
  a*     0个或多个连续的a,grep "a*" 即整篇文档,无意
(abc)*  0个或多个连续的abc
.* 任意长度的任意字符串
   




























元字符{} 限定表达式的匹配次数
\{n\}     匹配n次  
(ab){3}    匹配ababab
\{n,m\} 匹配n-m次
  (ab){1,3}    匹配ab/abab/ababab
\{n,\} 匹配至少n次
  (ab){2,}    匹配2个及以上连续的ab







如下,使用扩展正则可省略斜杠
# egrep "^ro{2}t" /etc/passwd
root:x:0:0:root:/root:/bin/bash
# grep "^ro\{2,\}t" /etc/passwd
root:x:0:0:root:/root:/bin/bash
#grep -E "^ro{2}t" /etc/passwd
root:x:0:0:root:/root:/bin/bash


元字符[]

匹配范围内的单个字符,[]内加
^可取反
[alc_?]     匹配其中任意一个
[a-z]    匹配任意一个小写字母
[A-Z]          匹配任意一个大写字母
[0-9]          匹配任意一个数字
[a-Z0-9]     匹配任意字母或数字
[^A-Z]        匹配没有大写字母的行
^[^a-z]      匹配不以小写字母开头的行
 











其他元字符
() 组合为整体(也用在后向引用)
  ab{1,3}    匹配ab/abb/abbb
  (ab){1,3}    匹配ab/abab/ababab
| 或者                            
  root|bin    匹配root或bin
\b 单词边界                        
  \broot\b    匹配单词root, 不匹配keroot/rooty/brooty等字符串
\< 单词的开头                    
  \<th         匹配以th开头的单词
\> 单词的结束                    
  \<root\>    作用与\broot\b相同
\ 转义符号,可以为一些普通字符赋予特殊含义,或者将一些特殊字符变为普通字符












字符集合
  [[:blank:]]  空格(space)与定位(tab)字符
  [[:cntrl:]]  控制字符
  [[:graph:]]  非空格(nonspace)字符
  [[:space:]]  所有空白字符
  [[:print:]]  可显示的字符
  [[:xdigit:]]  十六进制数字
  [[:punct:]]  所有标点符号
  [[:lower:]]  小写字母
  [[:upper:]]  大写字母
  [[:alpha:]]  大小写字母
  [[:digit:]]  数字
  [[:alnum:]]  数字和大小写字母

 

通配符及元字符  用来匹配复合条件的文件名,是完全匹配

  

  *     代表任意(0到多个)字符
  
? 代表任意1个字符
  ; 连续不同命令的分隔符
  # 配置文件注释
  
| 管道
  
~ 用户家目录
  
- 上一次的目录
  $ 变量前需要加的符号
  
/ 路径分隔符
  \ 转义
  
>或1> 重定向
  
>> 追加重定向
  
< 输入重定向
  
<< 追加输入重定向
  ‘’ 单引号,不具有变量置换功能,输出即所得
  
"" 双引号,具有变量置换功能,解析变量后输出
  `` tab上面的键中间为命令,会先执行,等价$()
  {} 中间为命令区块组合或内容序列 {
456} {1..4}
  
!
  
&& 当前一个指令执行成功后,执行后一个指令
  
|| 当前一个指令执行失败时,执行后一个指令
  .. 上一级目录
  . 当前目录
  
^ 反向选择符,例:grep -n '^[^a-zA-Z]' file []内的叫反向选择符[]外的则表示定位在行首。查找行首不是英文字母的行