Linux常用通配符及正则表达式

 

通配符、正则表达式使用场合:

通配符:一般是用于命令行脚本等bash环境(df、cut、sort、uniq、tr等)

linux正则表达式:常用于三剑客场景(grep、awk、sed)

 


通配符

常见通配符

复制代码
*       - 代表所有(0到多个)字符      
?       - 代表任意一个字符
[0-9] - 匹配0-9之间的单个数字
[abc] - 匹配这三个字符中的任意一个字符
;       - 两个命令之间的分隔符
#       - 在配置文件里,注释效果
|       - 管道文件
~       - 当前用户的家目录
-       - 上一次的所在目录
$       - 变量前需要加的符号
/       - 路径分隔符,也是根
>或1>   - 输出重定向,覆盖原有数据
>>      - 追加输出重定向,追加在文件内容的尾部
<       - 输入重定向(xargs,tr)
<<      - 追加输入重定向(cat)
'       - 单引号,不具备变量置换功能,引号内所见即所得
"       - 双引号,具备变量置换功能,解析变量后输出,不加引号相当于双引号
`       - 反引号,两个``中间为命令,会先执行,等价$()
{}      - 中间为命令去、区块组合或内容系列
[]      - 中间为字元组合
()      - 在中间为子shell的起始与结束
!       - 逻辑运算中的“非”(not)
&&      - and并且,当前一个指令执行成功时,执行后一个指令
||      - or或者,当前一个指令执行失败时,执行后一个指令
..      - 代表上级目录
.       - 代表当前目录
复制代码

 


 正则表达式

 

分类:基本正则表达式BRE;扩展正则表达式ERE(需要grep -E,sed -r,awk好像没扩展正则)
元字符分类:字符匹配、匹配次数、位置锚定、分组。
 
匹配次数
复制代码
基础正则:
    *    :匹配前面的字符任意次,最少一次。且是贪婪模式,尽可能的长匹配。
    .*    :匹配任意长度的字符。
    \?    :匹配其前面的字符0次或1次。
    \+    :匹配其前面的字符最少1次。
    \{4\}    :匹配前面的字符4次。
    \{m,n\}    :匹配前面的字符最少m次,最多n次。
扩展正则:
    *    :匹配前面一个字符任意次。
    ?   : 匹配其前面的一个字符0次或1次。
    +    :匹配其前面的一个字符最少1次。
    {8}    :匹配前面的一个字符8次。
    {m,n}    :匹配前面的一个字符最少m次,最多n次。

练习:
1\{4\}   - 表示匹配字符 "1" 重复4次
1\{5,\}  - 表示匹配字符 "1" 重复4次或4次以上
a\{,8\}  - 表示匹配字符 "a" 重复8次或8次以内
d1\{3,5\} - 表示匹配字符 "1" 重复3-5次

复制代码

 

字符匹配

复制代码
基础正则表达式:
. :匹配任意单个字符。 [] :匹配指定范围内的任意单个字符。 [
-] :表示匹配"[-]"里一段字符的任意单个字符,如[0-9]即0到9。 [^] :匹配指定范围外的任意单个字符。 [[:alnum:]] :匹配字符和数字。 [[:alpha:]] :匹配a-z,A-Z。 [[:lower:]] :匹配小写字母。 [[:upper:]] :匹配大写字母。 [[:blank:]] :匹配空白字符(即空格和制表符)。 [[:digit:]] :匹配十进制数字。 [[:xdigit:]] :匹配十六进制数字。

复制代码

 

位置锚定(定位出现的位置)

复制代码
基础正则表达式:
    ^    :行首锚定,用于模式最左侧。
    $    :行尾锚定,用于模式最右侧。
    ^PATTERN$    :用于匹配整行。
    ^$    :匹配空白行。
    ^[[:space:]]$    :匹配空白行。
    \<或\b    :词首锚定,用于单词最左侧。
    \>或\b    :词尾锚定,用于单词最右侧。

练习:
 \<PATTERN\>    :匹配单词"PATTERN"。
\bPATTERN\b  :匹配单词"PATTERN"。
# cat test.sh |grep  "\blook\b" ,# cat test.sh |grep "\<look\>"  :匹配包含"look"单词的行。
复制代码

 

分组(一般sed用的多,用于文本替换)

复制代码
    \(\)    :将一个或多个字符捆绑在一起,当做一个整体进行处理。
    \n    : 表示从左侧起第n个括号以及与之匹配右括号之间的模式所匹配到的字符。
    \|    :表示或

扩展正则表达式:
    ()    :将一个或多个字符捆绑在一起,当做一个整体进行处理。
    |    : 表示或
  
练习:
   基础 \(string\+\(string2\)*\)    :其中\1代表string\+(string2\)*,\2代表string2。
   扩展 (string+(string2)*)    :其中\1代表string+(string2)*,\2代表string2。
     ()().*()  :其中\1表示第一个()内容,\2表示第二个()内容,以此类推....
a\
|b :表示a或b。 a|b :表示a或b; \(C\|c\)at :表示Cat或cat。 (C|c)at :表示Cat或cat;
复制代码

 

 
 

 

posted @   浮~生  阅读(1485)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示