Linux基础之正则表达式

正则表示式语法及在grep命令中的引用

1、grep: Global search REgular expression and Print out tht line

文本搜索工具,根据用户指定的模式对目标文本进行逐行匹配检查;打印匹配到的行

模式:由正则表达式字符及文本字符所编写的过滤条件

选项:

  • –color=auto 对匹配到的文本着色显示
  • -v 显示没有被匹配到的行
  • -i 忽略大小写匹配
  • -n 显示匹配到的行号
  • -c 统计匹配到的行总数
  • -o 仅显示匹配到的字符串
  • -q 静默模式,不输出任何信息
  • -A #: 同时显示匹配行后的#行
  • -B #: 同时显示匹配行前的#行
  • -C #: 同时显示匹配行前后的#行
  • -e 实现多选项之间的逻辑或关系(grep -e ‘cat’ -e ‘dog’ file)
  • -w 匹配整个单词 -E egrep -F fgrep

2、正则表达式

规则查看: man 7 regex

元字符分类:字符匹配、匹配次数、位置、分组

字符匹配:

  • . 匹配任意单个字符
  • [] 匹配指定范围内的任意单个字符   [^] 匹配指定范围外的任意单个字符
    1. [:lower:] 小写字母
    2. [:upper:]
    3. [:alpha:]
    4. [:digit:] 十进制数字
    5. [:alnum:] 字母和数字
    6. [:xdigit:] 十六进制数字
    7. [:blank:] 空白字符(空格和制表符)
    8. [:space:] 水平和垂直的空白字符
    9. [:cntrl:] 不可打印的控制字符
    10. [:graph:] 可打印的非空白字符
    11. [:print:] 可打印字符
    12. [:punct:] 标点符号

匹配次数:

  • * 匹配前面的字符任意次,贪婪模式:尽可能长的匹配 (.* 匹配任意长度的任何字符)
  • \? 匹配前面的字符0或1次
  • \+ 匹配前面的字符至少一次
  • \{n\} 匹配前面的字符n次  \{n,m\} 匹配前面的字符n-m次  \{,m\}  \{n,\}

位置锚定:定位字符出现的位置

  • ^ 行首;$ 行尾 (^$ 空白行; ^pattern$ 模式匹配整行 ;^[[:space:]]$ 空白行)
  • \<或者\b 词首锚定,用于单词模式的左侧
  • \<或者\b 词尾锚定,用于单词模式的右侧;单词边界:除了字母、数字、下划线_ (\<pattern\> 匹配整个单词)

分组: \(pattern\),将括号中的模式当作一组进行处理。分组括号中的模式匹配到的内容会被正则表式引擎记录于内部的变量中,这些变量的命名方式为:\1 \2 \3 。\1 表示从左侧起第一个左括号以及与之匹配的右括号之间的内容

后向引用:引用前面分组括号中模式匹配到的内容,并非模式本身

逻辑: \| 或

示例: 用到正则表达式的匹配模式需要用引号引起来

1、获得本机的ip地址

  • ifconfig eth0|grep “inet addr”|egrep -o “([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}”|head -1
  • ifconfig eth0|grep “inet addr”|egrep -o “.*Bcast:”|egrep -o “\b[[:digit:]\.]*\b”
  • 更准确的取法: ifconfig eth0|grep “inet addr”|egrep -o “(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])”

2、查找centos6中的系统用户,输出起用户名和uid

  • cut -d: -f1,3 /etc/passwd|grep -E “(\b[0-9]|[1-9][0-9]|[1-4][0-9][0-9])$”

3、查找centos系统的主版本号:

  • grep -o ” [0-9]” /etc/centos-release|tr -d  ” “

4、找出//etc/passwd中用户名和shell同名的行

  • grep ‘^\([^:]*\)\b.*\/\1$’ /etc/passwd

5、取路径的基名

  • echo “/etc/rc.d/init.d/” |egrep -o “[^/]*/?$”|tr -d “/”

6、取路径名

  • echo “/etc/rc.d/init.d/” |egrep -o “.*[^/]+”|egrep -o “.*/”|egrep -o “.*[^/]+”

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/86694

(0)
WadirumWadirum
上一篇 2017-09-09 16:50
下一篇 2017-09-09

相关推荐

  • 重定向和管道

    1.Linux给程序提供三种I/O设备 标准输入-0    默认接受来自键盘的输入 标准输出-1    默认输出到终端窗口 标准错误-2    默认输出到终端窗口 在dev下有个fd设备,打开的文件都有一个fd:file dexcriptor 文件描述符 I/O重定向:…

    2017-07-20
  • 如何实现在命令行输入pwd时显示出ifconfig的效果

    1、使用type ifconfig 查看   2、使用type pwd 查看 如果还没有使用过pwd则显示如下,表示pwd属于内部命令,然后输入enable -n pwd 禁用这个内部命令   如果已经使用过,就会显示hash,已经缓存过   此时就不仅需要禁用内部命令,还需要使用hash -d pwd 清除pwd的缓存,使其在…

    2017-07-13
  • Linux基础 & bash基础特性

    Q1:描述计算机的组成及其功能。 计算机的组成:运算器、控制器、存储设备、输入设备、输出设备。 运算器: 运算器是计算机中执行各种算术和逻辑运算操作的部件。运算器的基本操作包括加、减、乘、除四则运算,与、或、非、异或等逻辑操作,以及移位、比较和传送等操作,亦称算术逻辑部件。 存储设备: 计算机总是需要记录与读取数据的,而这些数据当然不可能每次都由用户经过键盘…

    Linux干货 2016-10-30
  • N25-Week9

    1. 写一个脚本,判断当前系统上所有用户的shell是否为可登陆shell(即用户的shell不是/sbin/nologin);分别统计这两类用户的个数,通过字符串比较来实现 #! /bin/bash#写一个脚本,判断当前系统上所有用户的shell是否为可登陆shell(即用户的shell不是/sbin/nologin);#分别统计这两类用户的个数#通过字符…

    Linux干货 2017-03-10
  • 第八周:网络基础知识和shell脚本练习

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别; 网桥:是连接两个局域网的基于MAC地址数据存储转发设备,工作于数据链路层 集线器:所有端口处于同一个广播域和冲突域中,带宽共享,工作于物理层 二层交换机:多端口网桥,一个端口一个冲突域,默认所有端口位于同一个广播域中,可以划分vlan,隔离广播域,带宽独享 三层交换机:具有路由功…

    Linux干货 2016-11-21
  • Linux基础之RAID

    一.RAID介绍 RAID刚开始出现的时候叫做廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks),但在当时磁盘并非像现在这么便宜,反而这种组合方式使得代价非常昂贵,所以后来改名为独立磁盘冗余阵列(Redundant Array of Independent Disks),基本的思想就是组合组合多个便宜的,性能相对较低…

    Linux干货 2016-11-08