什么是正则表达式  

  正则表达式分为基础正则和扩展正则,都是为了匹配符合预期要求的字符串

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

  只需要记住,对文件内容或是展示文本的操作都是正则,而对目录或文件名的操作则都是通配符(例如find指令)  

基础正则和扩展正则

  扩展正则包含基础正则,而且多出了  +    ?   |    ()四个指令(注意这里的 | 要和管道符分开)

  扩展正则不需要像基础正则一样对某些符号进行转义(一般是用 反斜杠  \  来进行)

基础正则表达式符号

符号 描述 实例
. 代表单个字符(必须存在)

a..b

可以表示acdb

aaab 、abbbb

但不可以表示acb、ab、aba等

*

要和通配符区分开,匹配 * 前面一个字符的0个或多个

*后面的字符一定要在*前面字符的后面

另外*前后字符必须相邻否则匹配不到

a*b

可以表示ab、aab、b、abababab

但不可以表示acb、ba等

acb只会匹配到b,也就是视为b前面有0个a

ba也只会匹配到b,同样视为b前面有0个a

^ 匹配 ^ 后面字符串开头

输入:echo  -e  abcd\accc | grep "^ab"

输出:abcd

$  匹配 $ 前面字符串结尾  

输入:echo  -e  abcd\accc | grep "cc$"

输出:accc

 .*  匹配任意个字符(0到多个)

a.*b

和通配符里面的 * 大致类似

可以代表ab、 acb、 a……b

但不能代表b……a

 []

表示范围,可以用来进行模糊匹配

常用选项为【a-z】 【0-9】

1.  grep【0-9】 text 过滤出含数字的行

2.  grep【a-z】 text 过滤出含小写字母的行

3.  grep 【abc】 text 过滤出含有a,b,c的行(注意这个abc是分别匹配,也就是相当于匹配含有a的行,b的行,c的行,并不是字符串abc的行)

 {}

{n,m}表示匹配 {} 前面字符的至少n个,最多m个 字符,注意:是连在一起的连续字符

还可以为{n,}表示至少有n个

{,m}表示最多有m个

1.输入echo abbcdfbjk | grep -E "b{1,2}"

输出 abbcdfbjk

2. 如果 输入 echo abbcdfbjk | grep -E "b{2,}"  #表示至少两个

输出结果为 abbcdfbjk  可以看到只有连在一起的两个bb被匹配到,也就是说明了{}里面的数字表示的不是匹配到的个数,而是匹配字符的长度,像这个例子就是要求出现 b 的长度至少是2,所以只有 bb 被匹配到了

3.  输入 grep -E "ac{2,5}b" 匹配a和b之间至少2个最多5个c的行,但是acb要连在一起

 【^】  【^a】表示匹配 a 以外的所有字符

输入  echo  -e abc \ def \ lmn | grep "[^f-z]"

输出  abc  def lmn,只有[a-e]配匹配到

 ^[^]  匹配 ^[^a]中的以a为开头以外的所有行  grep "^[^#]"  /etc/passwd   匹配  /etc/passwd  里面不以#开头的所有行
\<  ;  \>

锚定 单词首部 (尾部)

表示在匹配在首部(尾部)以空格或特殊字符为分隔的指定字符。如果同时锚定首尾  \<  \>  则表示这个字符的准确匹配,它的前后为特殊字符或空格分隔,不会和任何字符直接连接

注意:必须要加 \ 转义,即使使用扩展正则也要加  \  进行转义

输入 :echo "hi,rootamroot" | grep "\<root"
输出:hi,rootamroot

输入: echo "hiroot iamroot" | grep "root\>"
输出: hiroot iamroot

输入: echo "hi,root  iamroot" | grep "\<root\>"
输出:hi,root  iamroot

 ()

\1  调用前面的参数—第一个分组(也就是括号里的参数)

如果用扩展正则则不需要 \ 来进行转义

过滤出一行中有两个相同数字的行

# grep "\([0-9]\).*\1"  /etc/passwd

过滤出行首和行位字母相同的行

# grep "^\([a-z]\).*\1$" /etc/passwd

shell脚本——正则表达式的更多相关文章

  1. Shell 编程 正则表达式

    本篇主要写一些shell脚本正则表达式的使用基础. 概述 正则表达式分为基础正则表达式(Regular Expression)与扩展正则表达式(Extended Regular Expression) ...

  2. 学习笔记之Shell脚本学习指南 & sed与awk & 正则表达式

    正则表达式_百度百科 http://baike.baidu.com/link?url=ybgDrN2WQQKN64_gu-diCqdeDqL8LQ-jiQ-ftzzPaNUa9CmgBRDNnyx50 ...

  3. shell脚本 字串截取 正则表达式

    字串处理 子串截取方法一:使用${}表达式格式:echo ${x:起始位置:长度}(起始位置编号从0开始,可省略) 方法二:使用expr substr格式:expr substr "$x&q ...

  4. Shell脚本的编写,sed的使用以及一些正则表达式

    Shell脚本的简单编写以及sed的使用 标签(空格分隔): 博客文章 前一阵子为了批量修改Web审计规则,故编写了一个Shell脚本,顺便使用了下sed,顺便把正则表达式也重新学习一遍,感觉还是需要 ...

  5. shell脚本命令(sotr/unip/tr/cut/eval)与正则表达式

    shell脚本命令(sotr/unip/tr/cut/eval)与正则表达式 1.sort命令 概述: Linux sort命令用于将文本文件内容加以排序. sort命令可针对文本文件的内容,以行为单 ...

  6. Linux shell 脚本攻略之正则表达式入门

    摘自:<Linux shell 脚本攻略> 下面是类似的解释:

  7. shell脚本(14)-正则表达式

    一.正则表达式介绍 正则表达式是一种文本模式匹配,包括普通字符(a...z)和特殊字符(元字符). 它是一种字符串匹配模式,可以用来检查一个字符串是否含有某种子串.将匹配的子串替换或者从某个字符串中取 ...

  8. 学习 shell脚本之前的基础知识

    转载自:http://www.92csz.com/study/linux/12.htm  学习 shell脚本之前的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写sh ...

  9. linux 基础 shell脚本命令

    #########shell脚本命令#### 1.diff diff file file1 ####比较两个文件的不同 -c ####显示周围的行 -u ####按照一格式统一输出生成补丁 -r ## ...

随机推荐

  1. Windows系统因“CredSSP加密Oracle修正”无法远程连接

    解决办法如下: 在电脑本机运行(快捷键 Win+R)输入:gpedit.msc 回车: 计算机配置->管理模板->系统->凭据分配->右侧找到“加密Oracle凭据”双击-&g ...

  2. Android Tcp操作

    Tcp是基于传输层的面向连接的可靠通讯协议,其优点是基于连接,使得服务端和客户端可以实现双向通信,且实时性高,在需要服务端主动向客户端推送数据的应用场景中,使用TCP协议是一种很好的方式. 初学And ...

  3. C#易失域、锁的分享,多线程

    C#多线程.易失域.锁的分享 一.多线程 windows系统是一个多线程的操作系统.一个程序至少有一个进程,一个进程至少有一个线程.进程是线程的容器,一个C#客户端程序开始于一个单独的线程,CLR(公 ...

  4. web自动化测试笔记(一)

    web自动化测试环境配置(JDK) 使用selenium工具做自动化测试之前,首先要做的准备工作是配置一下web自动化测试的环境. 1.下载jdk http://www.oracle.com/tech ...

  5. mybatis 一对一 一对多 多对多

    一对一 一对多 多对多

  6. Ackermann Steering System

    Source : https://www.hotrod.com/articles/ctrp-0407-ackermann-steering-system/ Tuning Your Steering S ...

  7. 高仿linux下的ls -l命令——C语言实现

    主要用到的函数可以参考头文件,仅仅支持ls -l这功能,扩展就交给大家了0.0 相关测试图片: ​ ​ 话不多说,直接上码 #include <stdio.h> #include < ...

  8. kubernetes 实践五:Service详解

    Service 是 k8s 的核心概念,通过创建Service,可以为一组具有相同功能的容器应用提供一个统一的入口地址,并且将请求负载分发到后端的各个容器应用上. Service 的定义 Servic ...

  9. foreach引用坑

    先看下面代码 $arr1 = [1, 2]; foreach($arr1 as $key => $value) { $value = $value + 1; } var_dump($key, $ ...

  10. 【LEETCODE】48、数组分类,简单级别,题目:189,217,219,268,283,414

    package y2019.Algorithm.array; import java.util.Arrays; import java.util.Stack; /** * @ClassName Rot ...