前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >通配符与正则

通配符与正则

作者头像
zucchiniy
发布2020-05-22 12:24:00
1.1K0
发布2020-05-22 12:24:00
举报
文章被收录于专栏:洞明学问洞明学问

简述

通配符和正则表达式很容易混淆,首先二者所应用的对象是不同的,通配符主要是用在 Shell 命令中,比如 findlscp 等,而正则是使用在文本过滤工具(可以是字符串搜索和替换等),例如 awksed 等。

通配符

[a-z] […] : 匹配方括号中指定范围内的单个字符或方括号列出的其中一个字符 [!9] [!..] : 不匹配方括号中的字符或指定范围内的单个字符 * : 匹配 0 个字符或多个字符 ? : 匹配任何单个字符,且不能为空的字符

因为 Shell 会将方括号( [] )、问号( ? )、星号( * )等内容特殊处理,因此想匹配这几个字符时,需要加转义符 \

通配符号

内容

*

万用字符,代表0个或者多个字符(包括数字)

?

万用字符,代表一定有一个字符

#

注解字符,常用在说明或者备注中

\

转义字符,将特殊字符还原为一般字符

|

分隔字符,分隔两个管道命令

;

连续命令界定符,用来分隔

~

登录用户的 home 路径

$

变量声明字符,用来表示变量

&

后台执行命令

!

逻辑运算符非

> >>

输出导入符,一个为取代,两个为累加

单引号,不具有变量转换功能

"

具有变量转换功能

``

中间为可以先执行的指令

()

中间为子 shell 起始与结束

[]

中间为字符组合

{}

中间为命令区块的组合

正则表达式

字符匹配

. : 匹配任意单个字符 * : 匹配其前面一个字符出现任意次 ? : 匹配其前面的字符1次或者0次 + : 匹配其前面的字符至少出现1次(扩展正则表达式中)

位置匹配

^ : 行首 $ : 行尾 \< 或 \b : 词首,其后面的任意字符必须作为单词首部出现 \> 或 \b : 词尾,其前面的任意字符必须作为单词尾部出现 \B : 非单词开头或结尾 ^$ : 空白行

分组

(ab)* : 匹配 ab 这个分组出现任意次 \1 : 引用第一个左括号以及与之对应的右括号所包括的内容 \n : 同 \1

特殊

[:alnum:] : 任何字母和数字 [:alpha:] : 任何字母 [:cntrl:] : 控制字符,包括 ASCII 表中的 000 - 037 再加上 177(‘DEL’) [:digit:] : 任何数字 [:punct:] : 标点符号,'!"#$%&()*-+,./:;<=>?@[]\\^_{|}~ [:graph:] : 打印字符,等价于 [:alnum:] + [:punct:] [:lower:] : 小字字母 [:upper:] : 大写字母 [:print:] : 可打印字符,等价于 [:alnum:] + [punct:] + [:space:] [:space:] : 空白字符,包括 tab/newline/vertical tab/form feed/carriage return/space [:xdigit:] : 任何16进制数字,相当于 [0-9a-fA-F]

  1. ^[[:space:]]*$ : 匹配没有任何内容的行
  2. [] : 中的特殊字符( . , ***** )会失去特殊含义

正则

意义

^word

搜索在行首的字符串

word$

搜索在行尾的字符串

.

任意一个字符

\

转义字符

*

重复0个或者多个前一字符情况

{n,m}

连续 n 到 m 个的前一个字符,若为 {n} 则是连续的 n 个前一个字符,若是 {n,} 则是连续 n 个以上的前一个字符

[list]

表示字符列表集合

[ch1-ch2]

表示字符顺序列表

[^]

表示不包含字符

使用正则进行匹配的示例

grep -n '^#' temp.txt:搜索到行首为 # 的那一行 grep -n '!$' temp.txt:搜索行尾为 ! 的那一行 grep -n 'e.e' temp.txt:搜索字符串可以是 eve ,eae ,e e ,但是不会是 ee grep -n ''' temp.txt:搜索含有 ’ 的那一行 grep -n 'ess*' temp.txt:找出有 es , ess , esss 的一行,因为 * 是大于等0个,所以可以匹配 es grep -n 'go{2,3}g' temp.txt:在 g 和 g 之间有 2 到 3 个 o 存在,即 goog , gooog grep -n 'g[ld]' temp.txt:搜索含有 gl 和 gd 的那一个,注意,这里只代表一个,如 [lad]f ,只有 glf , gaf 和 gdf 可以被搜索到,如果是 glaf 这种则是不能被找到的 grep -n '[0-9]' temp.txt:搜索含有任意数字的一行,注意,在 [] 中的 - 是有特殊含义的,同时也可以使用 grep -n [:digit:] temp.txt来代替。而 - 中的顺序是由 ASCII 来设定的 grep -n 'oo[^t]' temp.txt:搜索不为 oot 的那一行

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-05-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简述
  • 通配符
  • 正则表达式
    • 字符匹配
      • 位置匹配
        • 分组
          • 特殊
            • 使用正则进行匹配的示例
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档