【前端&运维那点事儿】九:迈向Shell的第五步:正则表达式

1,214 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第10天,点击查看活动详情

Hi~,我是一碗周,如果写的文章有幸可以得到你的青睐,万分有幸~

🍇 写在前面

先来介绍一下新开的这个专栏:《前端&运维那点事儿》将会从前端的角度,依次学习Linux→Nginx→Docker→持续集成→k8s,从而打造一个属于站在前端角度的运维专栏。

这篇文章我们介绍一下Linux中的正则表达式,文中的主要内容如下:

  • 正则表达式与通配符的区别

  • Linux中正则表达式的基本用法

  • 正则表达式的一些案例

🍈 通配符

🍉 通配符

Linux中通配符的主要作用是用来匹配文件名,通过配合lsfindws等命令一起使用。

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个到无穷多个的前一个字符

区分这两者的最好办法是:

  • 匹配文件名时,比如lsfindcp等命令,用通配符;

  • 在文本中过滤命令中的那些元字符就是正则表达式。

🍋 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' 
  1. 匹配以From开头的所有行

    [root@ywanzhou test]$ grep '^From' text.txt 
    From distance, mountain is richly colorful.
    
    
  2. 匹配以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.
    
    
  3. 匹配以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.
    
  4. 匹配以A或者a开头的单词,其中必须包含字母d

    [root@ywanzhou test]$ grep '\<[Aa][a-z]*d' text.txt 
    Spring is gone, but flowers are still around.
    
  5. 匹配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中的基础正则表达式以及写了一些小案例。

如果对本篇文章对你有所帮助,可以点赞收藏评论支持一下我;如果有所疑问,欢迎私信~