通配符与正则

简述

通配符和正则表达式很容易混淆,首先二者所应用的对象是不同的,通配符主要是用在 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 的那一行

Author
Tags
总结(3) Emacs(2) org mode(4) 年度清单(2) 读书清单(2) 电影清单(2) 电视清单(2) Python(3) 学习计划(1) 子弹笔记(1) 手帐体系(1) 时间管理(1) 时间使用效率(1) 形意拳(1) 知识管理(1) 简历(1) 技能水平(1) 生活(1) 减法生活(1) 阅读(1) 阅读分组(1) org(1) docx(1) markdown(2) cmder(1) 图床(1) jsdelivr(1) github(1) 安卓系统(1) 手动更新手机系统(1) post link(1) post path(1) hexo(2) hugo(2) GitHub Pages(1) travis(1) 自动部署博客(1) presentation(1) gcc(1) g++(1) 默认表格(1) 复杂表格(1) multimd table(1) google adsense(1) evil(1) surround(1) librime(2) emacs-rime(1) liberime(1) dot(1) graphviz(1) use-sub-superscripts(1) ditaa(1) Evil Multiple cursors(1) turn evil mode off(1) modifier keys(1) keymap(1) super(1) hyper(1) install Emacs(1) Mac OS(1) keybinds(1) clocktable(1) coding system(1) image library(1) keybind(1) spacemacs(1) org babel(1) homebrew(1) dd(1) diskutil(1) tmux(1) xcode(1) xcrun(1) node-gyp(1) tar(1) tree(1) pacman(1) plantuml(1) find(1) grep(2) du(1) apt-get(1) apt(1) regex(1) wildcard(1) zsh(1) gdb(1) lsof(1) netstat(1) rebase(2) workflow(1) 工作流(1) .gitignore(1) postbuffer(1) hung up(1) merge(1) cache(1) reset(1) Git(1) command(1) submodule(1) GitHub Pull Request(1) pr(1) Matplotlib(1) beautifusoup(1) 下载小说(1) SOLID(1) Leetcode(2) 透视表(1) read_excel()(1) pandas(1) conda(1) django(1) markdown-deux(1) mysql(1) oracle(1) 模糊查询(1) logging level(1) reflex(1) Field(1) Maven(1) Selenium(1) 下拉框(1) select into(1) insert into select(1) CAST(1) CONVERT(1) timestamp(1) concat(1) concat_ws(1) group_concat(1) union(1) grant privileges(1) 重置 root 密码(1) 报错 10060(1) 清理连接数(1) create user(1) set password(1) exists(1) in(1) markdown-it(1) emoji(1) tasks(1) valine(1) Code 504(1) Hugo(1) theme(1) substring(1) indexOf(1) RegExp(1) 定位节点(1) 正则匹配(1) async(1) 异步请求(1) css(2) layui(1) 滚动条(1) JavaScript(1)