在使用sed和gawk时如果能够熟练的使用正则表达式,可以准确的过滤到自己需要的信息

Linux中,有两种流行的正则表达式引擎:

  • POSIX基础正则表达式,BRE引擎
  • POSIX扩展正则表达式,ERE引擎

一、BRE模式

1.1 纯文本

基本上没什么可写的,区分大小写,多个空格也可以匹配。

1.2 特殊字符

正则表达式识别的特殊字符包括这些,如果需要使用特殊字符,需要转义符(\)。

  1. .*[]^${}\+?|()

1.3 锚字符

  • 或字符(^)锁定在行首
  • 美元符($)锁定在行尾
  • 两个组合(^$)可以过滤空行
  1. sed -n '/^this/p' data3
  2. echo "This ^ is a test" | sed -n '/s ^/p'
  3.  
  4. echo "This is a good book" | sed -n '/book$/p'
  5. echo "This book is good" | sed -n '/book$/p'
  6.  
  7. sed -n '/^this is a test$/p' data4
  8. sed '/^$/d' data5

使用例子

1.4 点号字符

匹配除换行符之外的任意单个字符。

  1. sed -n '/.at/p' data6

1.5 字符组

使用方括号来定义字符组

  1. sed -n '/[ch]at/p' data6
  2. echo "Yes" | sed -n '/[Yy]es/p'

1.6 排除型字符组

也可以反转字符组的作用,在字符组的开头加个脱字符

  1. sed -n '/[^ch]at/p' data6

1.7 区间

用破折号可以表示字符中间的内容,第一个字符,破折号,最后一个字符

  1. sed -n '/^[0-9][0-9][0-9][0-9][0-9]$/p' data8

1.8 特殊的字符组

  • [[:alpha:]]       匹配任意字母字符,不管是大写还是小写
  • [[:alnum:]]           匹配任意字母数字字符0~9、A~Z或a~z
  • [[:blank::]]           匹配空格或制表符
  • [[:digit:]]              匹配0~9之间的数字
  • [[:lower:]]            匹配小写字母字符a~z
  • [[:print:]]             匹配仍以可打印字符
  • [[:punct:]]           匹配标点符号
  • [[:space:]]          匹配任意空白字符:空格、制表符、NL、FF、VT和CR
  • [[:upper:]]          匹配任意大写字母字符A~Z

这些表达式可以像普通字符组一样使用。

  1. echo "abc" | sed -n '/[[:digit:]]/p'
  2. echo "abc" | sed -n '/[[:alpha:]]/p'
  3. echo "abc123" | sed -n '/[[:digit:]]/p'

1.9 星号

星号表明该字符必须在匹配模式的文本中出现0次或多次

  1. echo "ik" | sed -n '/ie*k/p'
  2. echo "iek" | sed -n '/ie*k/p'
  3. echo "ieek" | sed -n '/ie*k/p'
  4. echo "ieeek" | sed -n '/ie*k/p'

二、ERE模式

2.1 问号

问号表明前面的字符可以出现0次或1次。

  1. echo "bt" | gawk '/be?t/{print $0}'
  2. bt
  3. echo "bet" | gawk '/be?t/{print $0}'
  4. bet
  5. echo "beet" | gawk '/be?t/{print $0}'
  6.  
  7. echo "beeet" | gawk '/be?t/{print $0}'

2.2 加号

加号表明前面的字符可以出现1次或多次,但必须至少出现1次。

  1. echo "beeet" | gawk '/be+t/{print $0}'
  2.  
  3. echo "beet" | gawk '/be+t/{print $0}'
  4.  
  5. echo "bet" | gawk '/be+t/{print $0}'

2.3 花括号

花括号允许你可重复的正则表达式指定一个上限。这通常成为间隔,可以用两种格式来指定区间。

m:正则表达式准确出现m次。

m,n:正则表达式至少出现m次,至多n次。

  1. echo "bt" | gawk --re-interval '/b[ae]{1,2}t/{print $0}'
  2.  
  3. echo "bat" | gawk --re-interval '/b[ae]{1,2}t/{print $0}'
  4.  
  5. echo "bet" | gawk --re-interval '/b[ae]{1,2}t/{print $0}'

2.4 管道符号

就是linux里的|符号,一样的管道。应该是逻辑或的感觉

  1. echo "The cat is asleep" | gawk '/cat|dog/{print $0}'
  2. The cat is asleep
  3. echo "The dog is asleep" | gawk '/cat|dog/{print $0}'
  4. The dog is asleep
  5. echo "The sheep is asleep" | gawk '/cat|dog/{print $0}'

2.5 表达式分组

使用园括号进行分组,当你将正则表达式模式分组时,该组会被视为一个标准字符。

  1. echo "Sat" | gawk '/Sat(urday)?/{print $0}'
  2. Sat
  3. echo "Saturday" | gawk '/Sat(urday)?/{print $0}'
  4.  
  5. echo "cat" | gawk '/(c|b)a(b|t)/{print $0}'
  6. cat
  7. echo "cab" | gawk '/(c|b)a(b|t)/{print $0}'
  8. cab
  9. echo "bat" | gawk '/(c|b)a(b|t)/{print $0}'
  10. bat
  11. echo "bab" | gawk '/(c|b)a(b|t)/{print $0}'
  12. bab
  13. echo "tab" | gawk '/(c|b)a(b|t)/{print $0}'
  14.  
  15. echo "tac" | gawk '/(c|b)a(b|t)/{print $0}'

shell学习----正则表达式的更多相关文章

  1. bash shell学习-正则表达式基础 (笔记)

    A gentleman is open-minded and optimistic; a small person is narrow-minded and pessimistic. "君子 ...

  2. Shell学习之结合正则表达式与通配符的使用(五)

    Shell学习之结合正则表达式与通配符的使用 目录 通配符 正则表达式与通配符 通配符 通配符的使用 正则表达式 正则表达式 正则表达式的使用 通配符 正则表达式与通配符 正则表达式用来在文件中匹配符 ...

  3. shell学习笔记

    shell学习笔记 .查看/etc/shells,看看有几个可用的Shell . 曾经用过的命令存在.bash_history中,但是~/.bash_history记录的是前一次登录前记录的所有指令, ...

  4. shell学习总结之自定义函数

    shell学习总结之自定义函数 Myfun (){ echo -n "now i is $i " ! [ "$i" ] && exit ; ec ...

  5. SHELL学习笔记----IF条件判断,判断条件

    SHELL学习笔记----IF条件判断,判断条件 前言: 无论什么编程语言都离不开条件判断.SHELL也不例外.  if list then           do something here   ...

  6. shell学习指南-阅读笔记

    shell学习指南真不是刚开始学习shell应该看得书,虽然其中讲了简单的linux命令,shell语法等,但是每章也有些深入和生僻地方,我想如果我刚学shell看到这样的地方一定会头疼的要死.或许也 ...

  7. 【转】shell学习笔记(一)——学习目的性、特殊字符、运算符等

    1 学习shell的目的性 写之前我们先来搞清楚为什么要学shell,学习要有目的性 shell简单.灵活.高效,特别适合处理一些系统管理方面的小问题 shell可以实现自动化管理,让系统管理员的工作 ...

  8. Shell学习之条件测试(四)

    Shell学习之条件测试 目录 逻辑测试 文件测试 数值比较 字符串比较 逻辑测试 格式: [ 表达式 ] 操作符 [ 表达式2 ] …… 命令1 操作符 命令2 …… 常用的操作符 ( 注意:-a和 ...

  9. Shell学习之环境变量配置文件(三)

    Shell学习之环境变量配置文件 目录 环境变量配置文件简介 环境变量配置文件作用 其他配置文件和登录信息 环境变量配置文件简介 环境变量配置文件简介 环境变量配置文件中主要是定义对系统操作环境生效的 ...

随机推荐

  1. python抽象篇:面向对象基础

    1.面向对象概述 面向过程编程:根据操作数据的函数或语句块来设计程序的. 函数式编程:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象编程:数据和功能结合起来,用称为对象的东西包 ...

  2. 虚拟机 vs 容器

    虚拟机 虚拟机本质上是模拟,模拟物理机上的硬件 虚拟机必须安装操作系统 一个虚拟机操作系统的崩溃不会影响到其他虚拟机 容器 容器的本质是经过隔离与限制的linux进程 容器使用的是物理机的资源 容器之 ...

  3. python+selenium元素定位之CSS学习01

    参考文档:https://www.w3school.com.cn/cssref/css_selectors.asp 选择器 例子 例子描述 CSS .class .intro 选择 class=&qu ...

  4. [Bzoj3262]陌上花开(CDQ分治&&树状数组||树套树)

    题目链接 题目就是赤裸裸的三维偏序,所以用CDQ+树状数组可以比较轻松的解决,但是还是树套树好想QAQ CDQ+树状数组 #include<bits/stdc++.h> using nam ...

  5. 工作中常见的hive语句总结

    hive的启动: 1.启动hadoop2.开启 metastore 在开启 hiveserver2服务nohup hive --service metastore >> log.out 2 ...

  6. adb logcat查看手机端日志

    前言 做app测试,遇到异常情况,查看日志是必不可少的,日志如何输出到手机sdcard和电脑的目录呢?这就需要用logcat输出日志了以下操作是基于windows平台的操作:adb logcat | ...

  7. wamp 环境的配置

    安装完wamp之后,基本不用配置什么环境,只要将mysql添加到你的环境变量中去即可.

  8. 媒介查询demo

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. js中的offsetWidth用法

    offsetWidth  //返回盒模型的宽度(包括width+左右padding+左右border) <style> #div1 { width:200px; height:200px; ...

  10. 前端开发JavaScript入门——JavaScript介绍&基本数据类型

    JavaScript 诞生于1995年,它的出现主要是用于处理网页中的 前端验证. • 所谓的前端验证,就是指检查用户输入的内容是否符合一定的 规则. • 比如:用户名的长度,密码的长度,邮箱的格式等 ...