持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第10天,点击查看活动详情
Hi~,我是一碗周,如果写的文章有幸可以得到你的青睐,万分有幸~
🍇 写在前面
先来介绍一下新开的这个专栏:《前端&运维那点事儿》将会从前端的角度,依次学习Linux→Nginx→Docker→持续集成→k8s,从而打造一个属于站在前端角度的运维专栏。
这篇文章我们介绍一下Linux中的正则表达式,文中的主要内容如下:
-
正则表达式与通配符的区别
-
Linux中正则表达式的基本用法
-
正则表达式的一些案例
🍈 通配符
🍉 通配符
Linux中通配符的主要作用是用来匹配文件名,通过配合ls
、find
、ws
等命令一起使用。
Linux中的通配符如下表所示:
通配符 | 含义 |
---|---|
* | 匹配任意数量的任意字符 |
? | 匹配1个任意字符 |
[abc] | 匹配中括号中的任意一个字符,这里匹配abc其中的任意一个 |
[^xyz] | 匹配除中括号中以外的任意一个字符,这里除了xyz任意字符全部匹配其中的任意一个 |
[a-z] | 匹配a到z中的所有字符,数字和大写字母同理 |
示例如下:
[root@ywanzhou test]$ ls # 查看已有的文件
a.txt b.txt c.txt d.txt e.txt f.txt
[root@ywanzhou test]$ ls *.txt # 查看以.txt结尾的文件
a.txt b.txt c.txt d.txt e.txt f.txt
[root@ywanzhou test]$ ls a?txt # 查看a+任意字符+txt的文件
a.txt
[root@ywanzhou test]$ ls [a,b,c].txt # 查看[a,b,c]序列中任意字符的.txt文件
a.txt b.txt c.txt
[root@ywanzhou test]$ ls [^a,b,c].txt # 上一句取反
d.txt e.txt f.txt
[root@ywanzhou test]$ ls [a-d].txt # 查看a到d的.txt文件
a.txt b.txt c.txt d.txt
🍊 和正则表达式的区别
正则表达式是什么我就不过多解释了,需要注意的是在Linux中特别容易混淆的就是正则和通配符,就比如元字符*
,作为通配符匹配文件名时表示0个到无穷多个任意字符。而作为正则表达式匹配字符串时,表示重复0个到无穷多个的前一个字符。
区分这两者的最好办法是:
-
匹配文件名时,比如
ls
、find
、cp
等命令,用通配符; -
在文本中过滤命令中的那些元字符就是正则表达式。
🍋 Linux中的正则表达式
这里只介绍一些Linux基本的正则表达式,这些内容在所有的语言中几乎都通用,下表展示了基本正则表达式以及其含义:
正则 | 含义 |
---|---|
a | 匹配字母a本身 |
. | 匹配任意一个字符 |
* | 匹配前一个字符的任意个,包括0个 |
[abc] | 匹配字符集中的任意一个字符,这里是abc |
[^abc] | 匹配除字符集中的任意一个字符,这里是除了abc匹配其他的任意一个字符 |
[a-z] | 匹配任意一个小写字母,也可以[A-Z] 、[0-9] ,同义 |
^ | 匹配首行 |
$ | 匹配行尾 |
a\{m\} | 匹配m个a |
a\{m,n\} | 匹配m至n个a |
a\{m,\} | 匹配最少m个a |
\<book\> | 精确匹配book这个单词,< 的作用的是以什么开头,> 的作用是以什么结尾 |
🍏 正则表达式案例
首先我们先创建一个文件
vim text.txt
写入如下内容:
From distance, mountain is richly colorful.
At close-up, flowing water does not make a sound.
Spring is gone, but flowers are still around.
People come near but birds do not seem frightened.
然后为grep
命令添加匹配的颜色显示,并设置为别名,命令如下:
alias grep='grep --color=auto'
-
匹配以
From
开头的所有行[root@ywanzhou test]$ grep '^From' text.txt From distance, mountain is richly colorful.
-
匹配以
d.
结尾的所有行[root@ywanzhou test]$ grep 'd.$' text.txt At close-up, flowing water does not make a sound. Spring is gone, but flowers are still around. People come near but birds do not seem frightened.
-
匹配以
A
或者a
开头的单词[root@ywanzhou test]$ grep '\<[Aa]' text.txt At close-up, flowing water does not make a sound. Spring is gone, but flowers are still around.
-
匹配以
A
或者a
开头的单词,其中必须包含字母d
[root@ywanzhou test]$ grep '\<[Aa][a-z]*d' text.txt Spring is gone, but flowers are still around.
-
匹配
a
出现1次到3次的单词[root@ywanzhou test]$ grep 'a\{1,3\}' text.txt From distance, mountain is richly colorful. At close-up, flowing water does not make a sound. Spring is gone, but flowers are still around. People come near but birds do not seem frightened.
🍎 写在最后
这篇文章到这就结束了,在这篇文章中我们介绍了通配符,通配符同正则表达式的区别,最后介绍了Linux中的基础正则表达式以及写了一些小案例。
如果对本篇文章对你有所帮助,可以点赞收藏评论支持一下我;如果有所疑问,欢迎私信~