通配符&正则表达式&特殊符号总结

通配符&正则表达式&特殊符号总结

通配符

概念

bash操作环境下的功能。

* 代表0个到任意多个字符

? 代表一定有一个任意字符

[] 代表一定有[]中的一个字符。如g[a,b,c]d表示gad、gbd、gcd

[-] 代表一定有编码顺序内的所有字符。如g[0-9]d表示g0d、g1d、g2d...、g9d

[^] 代表反向选择。如g[^abc]d表示gdd、ged、gfd...、gzd、g0d、g1d...

特殊字符

# 注释

\ 转义符号

| 管道符

; 命令分隔符,多条命令使用

~ 用户主文件夹

$ 变量前导符

& 作业控制,将作业变为后台

! 逻辑符--非

/ 目录符号

>,>> 数据流重定向,输出导向

<,<< 数据流重定向,输入导向

'' 单引号,不具备变量置换的功能

"" 双引号,具备变量置换的功能

`` 里面为先执行的命令,等效于$()

() 中间为子shell的起始与结束

{} 中间为命令块的组合

重要:

① !在[]中不是特殊字符。

表示反向选择:

[!a-z] 错误

[^a-z] 正确

② $()与``的区别

命令 结果

echo \$\$ $$

echo `echo \\$\\$` $$ ``中两个\表转义

echo $(echo \$\$) $$ $()中一个\表转义

正则表达式

概念

正则表达式是通过一些特殊字符的排列,用以查找、替换、删除一行或多行文字字符串。简单地说,就是用在字符串的处理上面的一项“表达式”

语系对正则表达式的影响

不同语系下,可能会得到不同的结果。

如[a-z]在gb2312下得到aAbB...z,C语系下得到abc...z

一般使用LANG=C语系

以下符号可以避免编码问题

特殊符号 代表意义

[:alnum:] 代表英文大小写字符及数字,即 0-9, A-Z, a-z

[:alpha:] 代表任何英文大小写字符,即 A-Z, a-z

[:digit:] 代表数字而已,即 0-9

[:lower:] 代表小写字符,即 a-z

[:upper:] 代表大写字符,即 A-Z

[:blank:] 代表空格键与 [Tab] 按键两者

[:cntrl:] 代表键盘上面的控制按键,即包括 CR, LF, Tab, Del.. 等等

[:graph:] 除了空格符 (空格键与 [Tab] 按键) 外的其他所有按键

[:print:] 代表任何可以被打印出来的字符

[:punct:] 代表标点符号 (punctuation symbol),即:" ' ? ! ; : # $

[:space:] 任何会产生空白的字符,包括空格键, [Tab], CR 等等

[:xdigit:] 代表 16 迚位的数字类型,因此包括: 0-9, A-F, a-f 的数字与字符

分类

依据不同的严谨程度分为基础正则表达式与扩展正则表达式

基础正则表达式的特殊字符

^word word$ . \ * [list]

[n1-n2] [^list] [^n1-n2] \{n\} \{n,m\} \{n,\}

^word 待查找的字符串word在行首

找出所有注释行

grep –n ‘^#’ regular_express.txt

找出开头不是英文字母的行

grep –n ‘^[^[:alpha:]]’ regular_express.txt

word$ 带查找的字符串word在行尾

找出!结尾的行

grep –n ‘\!$’ regular_express.txt

找出空白行

grep –n ‘^$’ regular_express.txt

. 代表一定有任意一个字符

找出包括g??d的字符串

grep –n ‘g..d’ regular_express.txt

\ 转义字符,转义特殊字符

找出小数点.结尾的行

grep –n ‘\.$’ regular_express.txt

* 重复0个到无穷多个的前一个字符

找出包含o、oo、ooo、oooo...的行

grep –n ‘oo*’ regular_express.txt

找出g开头和g结尾的所有行,当中任意字符

grep –n ‘g*g’ regular_express.txt 错误

grep –n ‘g.*g’ regular_express.txt 正确

找出包含任意数字的行

grep –n ‘[:digit:][:digit:]*’ regular_express.txt

[list] RE字符集合里面的任意一个字符

找到a或d开头的任意行

grep –n ‘^[ad]’ regular_express.txt

[n1-n2] 当前语系下RE字符集合的字符范围里面的任意一个字符

找到a或b或c或d开头的任意行

grep –n ‘^[a-d]’ regular_express.txt

[^list] 非RE字符集合

找到不是a或d开头的任意行

grep –n ‘^[^ad]’ regular_express.txt

注:b、c开头的会被列出

[^n1-n2] 非当前语系下RE字符集合的字符范围里面的任意一个字符

找到不是a或b或c或d开头的任意行

grep –n ‘^[^a-d]’ regular_express.txt

\{n\} 连续n个前一个RE字符

找到go...od(100个o)

grep –n ‘go\{100\}d’ regular_express.txt

\{n,m\} 连续n到m个前一个RE字符

找到go...od(2到5个o)

grep –n ‘go\{2,5\}d’ regular_express.txt

\{n,\} 连续n个以上前一个RE字符

找到go...od(5个o以上)

grep –n ‘go\{5,\}d’ regular_express.txt

扩展正则表达式的特殊字符

+ ? | () ()+

注:grep只支持基础正则表达式,grep –E(写作egrep)支持扩展正则表达式

+ 重复一个或一个以上的前一个RE字符

找到god、good、goo...od

egrep ‘go+d’ regular_express.txt

? 0个或1个前一个RE字符

找到gd、god

egrep ‘go?d’ regular_express.txt

| 用或的方式找出多个字符串(无规律)

找到glad、black、cache

egrep ‘glad|black|cache’ regular_express.txt

() 用组字符串找出多个字符串(有特定规律)

找到glad、good、geed

egrep ‘g(la|oo|ee)d’ regular_express.txt

()+ 找到有1个或多个重复组字符串

找到AxyzxyzxyzC

egrep ‘A(xyz)+C’ regular_express.txt

通配符和正则表达式的区别

通配符是系统命令使用,一般用来匹配文件名或者什么的用在系统命令中;

正则表达式是操作字符串,以行为单位来匹配字符串使用的。

符号

通配符

正则表达式

*

0个到任意多个字符

0个到任意多个前一个字符

?

一定有一个任意字符

0个或1个前一个字符

相关推荐

投入2000玩129级大唐,伤害不输法系
魔兽世界毛料掉落最多位置介绍
變更你的Riot ID
365bet足球平台

變更你的Riot ID

📅 01-06 👁️ 3451
2024 BL劇集電影:《大叔的愛》續集、《關於未知的我們》兄弟戀(持續更新)
天刀天魁币限额什么时候刷新_天刀天魁币限额已达上限
蚂蚁花呗体验额度怎么获取
脚下无根拳必空!腰马合一怎么练?这个动作让你立刻站稳如生根!
书单 | 12本书,书写那些平凡而伟大的职业
做一张老外看得懂的名片