11-linux基础八-正则表达式

摘要:
命令ls、find和cp不支持正则表达式,因此只能使用shell自己的通配符进行匹配。下面以grep为例描述正则表达式。

1. 正则表达式的概念及特点:

  正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,
这个“规则字符串”用来表达对字符串的一种过滤逻辑。规定一些特殊语法表示字符类、数量限定符和位置关系,然后用这些特殊语法和普
通字符一起表示一个模式,这就是正则表达式(Regular Expression)。
给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
  1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);
  2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。

2. 正则表达式与通配符的关系

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

元字符作用
*匹配0个或任意多个字符,也就是可以匹配任何内容
匹配任意一个字符
[]匹配[ ]中任意一个字符
[-]匹配括号中任意一个字符,-代表一个范围,例如:[a-z]代表匹配一个小写字母
[^]逻辑非,表示匹配不是中括号内的一个字符,例如[^0-9]代表匹配一个不是数字的字符
[!]逻辑非,表示匹配不是中括号内的一个字符,例如[!0-9]代表匹配一个不是数字的字符,同上

   正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命令可以支持正则表达式。以下以grep为例对正则表达式进行说明。

3. grep的主要参数:

  -n : 输出结果开头显示匹配的行在源文件中的行号

11-linux基础八-正则表达式第1张

  -o : 只显示匹配的内容

11-linux基础八-正则表达式第2张

  -q : 静默模式,没有任何输出。可用$?来判断执行成功没有,即有没有过滤到想要的内容。

 11-linux基础八-正则表达式第3张

  -l:如果匹配成功,则只将文件名打印出来,失败则不打印,通常-rl一起用

11-linux基础八-正则表达式第4张

  -A : 如果匹配成功,则将匹配行及其后n行一起打印出来

11-linux基础八-正则表达式第5张

  -B : 如果匹配成功,则将匹配行及其前n行一起打印出来

11-linux基础八-正则表达式第6张

  -C : 如果匹配成功,则将匹配行及其前后n行一起打印出来

 11-linux基础八-正则表达式第7张

  --color:匹配的内容显示时的着色方式,系统默认是自动(auto)

11-linux基础八-正则表达式第8张

  -c : 如果匹配成功,则将匹配到的行数打印出来

11-linux基础八-正则表达式第9张

  -E :等于egrep,扩展的正则表达式

11-linux基础八-正则表达式第10张

  -i :忽略大小写

 11-linux基础八-正则表达式第11张

  -v :取反,不匹配

11-linux基础八-正则表达式第12张

  -w:匹配单词

 11-linux基础八-正则表达式第13张

4. 基础正则表达式和拓展正则表达式

   grep一般情况下支持基本正则表达式;

  可以通过参数-E支持扩展正则表达式,grep单独提供了一个扩展命令叫做egrep用来支持扩展正则表达式,其和grep -E等价;

  此外,通过grep -P可支持Perl语言的正则匹配模式,更能更加灵活和强大;

  本文以egrep或grep -E来进行总结,不具体区分基本正则表达式和拓展正则表达式,建议使用egrep或grep -E。

5. 正则表达式说明:

  ^ 行首

11-linux基础八-正则表达式第14张

  $ 行尾

11-linux基础八-正则表达式第15张

  .  除了换行符以外的任意单个字符

11-linux基础八-正则表达式第16张

  * 前导字符的零个或多个

11-linux基础八-正则表达式第17张

  .* 所有字符

11-linux基础八-正则表达式第18张

  ? 匹配前面的字符0次或1次

11-linux基础八-正则表达式第19张

  + 匹配前面的字符1次或多次

11-linux基础八-正则表达式第20张

  {m} 匹配前面的字符m次

11-linux基础八-正则表达式第21张

  {m,n}匹配前面的字符m到n次

11-linux基础八-正则表达式第22张

  {m,}配置前面的字符至少m次

11-linux基础八-正则表达式第23张

  {,n}匹配之前的字符最多n次

11-linux基础八-正则表达式第24张

  [] 字符组内的任一字符,[a-z]匹配一个小写字母

11-linux基础八-正则表达式第25张

  [^] 对字符组内的每个字符取反(不匹配字符组内的每个字符)

11-linux基础八-正则表达式第26张

  | 匹配"|"左边的模式或者"|"右边的模式

11-linux基础八-正则表达式第27张

  ()将多个字符视为整体,提高优先级

11-linux基础八-正则表达式第28张

免责声明:文章转载自《11-linux基础八-正则表达式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇zabbix监控交换机2020 年了,Java 日志框架到底哪个性能好?——技术选型篇下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

IAR使用技巧 之 快捷键批量更换指定字符(以及Keil的全局替换功能)

使用IAR(或者Keil)写/移植程序时批量更换字符 作者:李剀 出处:https://www.cnblogs.com/kevin-nancy/p/10776712.html 或者 https://blog.csdn.net/Kevin_8_Lee/article/details/89576799 欢迎转载,但也请保留上面这段声明。谢谢!(上面这个也是...

shell替换

如果表达式中包含特殊字符,Shell 将会进行替换。例如,在双引号中使用变量就是一种替换,转义字符也是一种替换。举个例子: #!/bin/bash a=10 echo -e"Value of a is $a " 运行结果: Value of a is 10 这里 -e 表示对转义字符进行替换。如果不使用 -e 选项,将会原样输出: Value...

c# 获取键盘的输入

c# 获取键盘的输入  Console 类公开了三个方法获取键盘的输入,分别是Read 、Readkey、ReadLine Read方法: 每次只能读入一个字符,如果没有字符可以读,返回-1,Read方法是不会马上读取的,读取的事件是按下Enter键才会开始读取 ReadKey方法: 返回一个ConsoleKeyInfo结构的实例,通过这个结构的几个属性...

bad interpreter:No such file or directory 解决方法

今天在执行一个从网上考下来的脚本的时候,出现了下面的错误: Linux下面一个脚本死活也运行不了, 我检查了数遍,不可能有错。 提示:bad interpreter:No such file or directory 上网上找了好久,总算发现原来是文件格式的问题。  可以有很多种办法看这个文件是DOS格式的还是UNIX格式的, 还是MAC格式的(1)....

C#中去除String中的空格

第一种 Trim string中自带的方法Trim,可以去除行首行尾的空格,或将某一字符删除。如: var str = text.Trim(); 第二种 Regex类(正则表达式) 下面为转发 源地址:http://www.cnblogs.com/dudu/archive/2011/09/17/2179423.html 1. 匹配中文(全角)空格 Re...

pandas 按某列中的指定字符拆分某列 pandas.DataFrame.field.str.split()

需求 把指定列的数据根据指定字符进行拆分,并保留拆分后所需的列; 原始数据:  需要将这列数据根据 ‘.’ 进行拆分,并保留 .DCE 前面的部分; 解决 借助于 pandas.DataFrame.field.str.split() df['ts_code'].str.split('.', expand=True) # expand=True 将拆分出...