Linux - 正则表达式

正则表达式(Regular Expression,RE)是透过一些特殊字符的排列,用以[搜寻/取代/删除]一列或多列文字字符串,简单的说,正则表达式就是用在字符串的处理上面的一项“表达式”。如果想要以正则表达式的方式处理字符串,就要使用支持正则表达式的工具程序,例如 vi,grep,sed,awk等。但是像cp,ls等指令并不支持正则表达式,所以就只能使用bash自己本身的通配符。

注意:

  • 正则表达式的符号与通配符是完全不一样的东西
    因为通配符(wildcard)代表的是bash操作接口的一个功能,但正则表达式则是一种字符串处理的的表示方式。两者要分清楚啊~
  • 语系对正则表达式有影响
    因此在使用正则表达式时,要特别留意当时环境的语系为何,否则可能会发现与别人不相同的撷取结果。

下面关于正则表达式的练习和举例,都使用我们熟悉的grep来展示,grep是一个撷取命令,如果你不了解grep,可以从这篇小文章里简单了解一些Linux 之 Bash -- 管线命令

grep 的一些进阶选项
之所以这么说,是因为Linux 之 Bash -- 管线命令里面都没有提到~~
工作模式:grep [-A] [-B] [--color=auto]'搜寻字符串' filename
-A 后面可加数字,为after的意思,除了列出该行外,后面的n行也列出来
-B 后面可加数字,为before的意思,除了列出该行外,前面的n行也列出来
--color=auto 可将正确的那个撷取数据列出颜色

1.基础正则表达式

下面总结了一个精简的基础正则表达式的字符表格,不过不要局限于其中的范例啊,还要根据实际情况灵活改变,它的价值可远不止于此~

表达式 描述 范例
^ 行首标记 ^test 匹配以 test 起始的行
$ 行尾标记 test$ 匹配以 test 结尾的行
. 任意字符 t.t匹配任意代替.的一个字母(它就是英文状态的句号),如txt,但不能是两个字母如text
[] 匹配其中任意一个 t[ex]t匹配 tet 或 txt
[^] 除了其中任意一个 te[^xt] 除了 tet 和 txt 不能匹配,其他任意
[a-d] 匹配指定范围内任一个 能匹配a,b,c,d中任意一个字母
{n} 匹配之前n项 grep -w '[0-9]\{2\}' filename 撷取存在两位数字的文本行
{n,m} 最少匹配n次,最多m次 [0-9]\{2,4\} 匹配2位数到4位数
{n, } 至少匹配前面n次 [0-9]\{n, \}匹配至少是两位数的
* 匹配之前多个或没有 tx*t 匹配 tt 或 txt/txxt/txxxt/...
\ 转义(向来放在特殊符号前,* + ?等) bio\ +info 匹配bio+info

[^]表示反向选择
[^a-z]表示非小写字母
^[]表示定位在行首
^[a-z]表示行首非小写字母
^$表示空白行
g..d代表共4个字符,开头为g,结尾为d(.代表绝对有一个任意字符)
g.*g代表g开头且g结尾的字符串
[0-9][0-9]*表示任意数字
go\{2,5\}g 表示g后面接2-5个o和一个g的字符串(因为{}在shell中有特殊意义,所以用\来跳脱。这也是为什么👆表格的大括号{}都写成了\{\}
ls -l . | grep '^l'列出当前目录下的链接文档
(利用了链接文档的一个特性,其标头会是 lrwxrwxr)

再次提醒:正则表达式的 原字符*通配符* 不是一回事哦

  • 通配符中,它代表0-无穷多个字符
  • 正则表达式中,它代表匹配0-无穷多个的前一个RE字符

2.延伸正则表达

一般来讲,了解基础型的正则表达式已经能够帮助我们解决很多问题了。不过,某些时刻为了要简化整个指令操作,使用范围更广的延伸型正则表达会更加方便。
eg:延伸型正则表达可以透过群组功能‘|’来进行一次搜寻,其中的管道符|意义为“或 or”。不过,grep预设仅支持基础正则表达式,如果要使用延伸型正则表达,可以使用grep -E 或者 egrep。我觉得后者使用起来更方便哦(不用来回切换大小写~)

表达式 描述 范例
+ 匹配之前1个或多个 tx+t 匹配 txt 或 txxt/txxxt/...
匹配之前1个或没有 te?xt 只能匹配 txt 或 text
| 用或的方式找出字符串 gd|god|good匹配gd,god,good
() 匹配括号中的字符串 bio(info)? 匹配 bio 或 bioinfo
()+ 多个重复群组的判别 A(xyz)+C 匹配AxyzC或AxyzxyzC等...
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356