从零开始学习Linux(四十):Shell编程之正则表达式

1、正则表达式与通配符

正则表达式:用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命令都可以支持正则表达式。

通配符:用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了。

2、基础正则表达式

元字符 作用
* 前一个字符匹配0次或任意多次;
. 匹配除了换行符外任意一个字符;
^ 匹配行首。例如:^hello会匹配以hello开头的行;
$ 匹配行尾。例如:hello&会匹配以hello结尾的行;
[] 匹配中括号中指定的任意一个字符,只匹配一个字符。 例如:[abcd] 匹配abcd中任意一个字母,[0-9] 匹配任意一位数字, [a-z][0-9] 匹配小写和一位数字构成的两位字符;
[^] 匹配除中括号的字符以外的任意一个字符。例如:[^0-9] 匹配任意一位非数字字符,[^a-z] 表示任意一位非小写字母;
\ 转义符。用于将特殊符号的含义取消。
\{n\} 表示其前面的字符恰好出现n次。例如:[0-9]{4} 匹配4位数字;
\{n,\} 表示其前面的字符出现不小于n次。例如: [0-9]{2,} 表示两位及以上的数字;
\{n,m\} 表示其前面的字符至少出现n次,最多出现m次。例如: [a-z]{6,8} 匹配6到8位的小写字母;

3、测试正则表达式

创建文件test_rule.txt,并且编辑内容。如下图所示:

3.1、* 前一个字符匹配0次,或任意多次

命令1:grep "h*" test_rule.txt
作用:匹配所有内容,包括空白行;

命令2:grep "hh*" test_rule.txt
作用:匹配至少包含有一个h的行;

命令3:grep "hhh*" test_rule.txt
作用:匹配至少包含两个连续h的字符串;

3.2、. 匹配除了换行符外任意一个字符

命令:grep "y..r" test_rule.txt
作用:匹配在y和r这两个字母之间一定有两个字符的字符串;

3.3、^匹配行首

命令:grep "^m" test_rule.txt
作用:搜索以m开头的行

3.4、$匹配行尾

命令:grep "h$" test_rule.txt
作用:搜索以h结尾的行

前面在 从零开始学习Linux(三十一):Shell脚本的执行方式 章节中提到过windows下shell脚本和Linux系统下shell脚本格式不同的问题。Linux系统下shell脚本格式是以$为行尾的,但是Windows下面shell脚本格式是以^M$为行尾的。

通过命令"cat -A test_rule.txt"可以查看,如下图所示:

如果是以^M$为行尾的,使用命令"grep "h$" test_rule.txt",是匹配不到任何数据的。

因此,当使用$匹配行尾且没有匹配到任何数据的时候,先考虑一下是否是由于文件格式的原因导致的。如果格式不一样,可以使用前面章节提到的命令转换一下文件格式。

3.5、[]匹配括号中指定的任意一个字符,只匹配一个字符

命令:grep "h[eh]h" test_rule.txt
作用: 匹配h和h字母中为e和h的行数据。

3.6、 [^] 匹配除中括号的字符以外的任意一个字符

命令:grep "^[^a-z]" test_rule.txt
作用:匹配不以小写字母开头的行

3.7、\ 转义符

命令:grep "\!$" test_rule.txt
作用:搜索以!结尾的行

3.8、\{n\} 表示其前面的字符恰好出现n次

命令:grep "o\{2\}" test_rule.txt
作用:匹配连续出现2次o的行数据

3.9、\{n,m\} 匹配其前面的字符至少出现n次最多出现m次

命令:grep "o\{3,5\}" test_rule.txt
作用:匹配连续出现最少3次,最多5次的行数据

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容