`
shinfocom
  • 浏览: 1181444 次
文章分类
社区版块
存档分类
最新评论

shell脚本学习:快速理解正则表达式之grep篇

 
阅读更多

shell脚本是Linux的核心之一,而正则表达式是shell脚本的核心之一,理解正则表达式可以快速匹配需要查找的内容,对以后的shell脚本编程打下一个坚实的基础。

接触正则表达式一般从grep命令开始,例如:

grep "^#[:space:]*" /etc/inittab

这个命令中“^#[:space:]*”就是正则表达式的内容,它的意思是“以#开头后跟任意个空格”,结合grep命令,就是显示/etc/inittab文件里“以#开头后跟任意个空格”的内容。

grep命令的作用是查找匹配的内容并打印出来

grep [option] 正则表达式 要查抄的文件

-i 不区分大小写

-color 以高亮显示匹配的文本内容

-E 使用扩展的元字符

-v取反

那么正则表达式分有哪些?

—————————————————————————————————————————————————————

在shell里,正则表达式分为,标准元字符、扩展元字符

标准元字符: ^ $ . * [] [x-y] [^] \ \< \> \(...)\ x\{m\n}

扩展元字符: ^ $ . * [][^] + ? a|b ()

相关资料:http://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F

#可在上面的链接里查到各自的意思

另外一个重要的知识:posix方括号字符集

[:alnum:] [:lower:] [:xdigit:]

[:alpha:][:print:] [:blank:]

[:blank:] [:punct:]

[:cntrl:] [:space:]

[:graph:] [::upper:]

上面的例子grep "^#[:space:]*" /etc/inittab 里[:space:]代表空白字符,posix字符集和正则表达式配合使用可以产生很强大的功能,许多时候我们都可以借助它来实现自己的目的。

例如:显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行

#这个命令里注意 ^和[]的使用,通常^[]用来匹配开头是某个字符,^[[:space:]]因为要求匹配的是开头是空白字符,所以用[[:space:]]而不是[:space:],如果错误的写成^[:space:]那么就锚定[]里的内容,现在知道[]的作用了吧:锚定某个字符,多个代表多个可能

下面几个难度稍高一点的练习来学习理解正则表达式

1.显示/etc/inittab文件中以一个数字开头并以一个与开头数字相同的数字结尾的行;
2.ifconfig命令可以显示当前主机的IP地址相关的信息等,如果使用grep等文本处理命令取出本机的各IP地址,要求不包127.0.0.1;
3.显示/etc/sysconfig/network-scripts/ifcfg-eth0文件中的包含了类似IP地址点分十进制数字格式的行;

##答案:

1.grep "^\([0-9]\).*\1$" /etc/inittab

2.ifcofig | grep "inet addr" | grep -v '127.0.0.1' | cut -d: -f2 | cut -d "" f1

3. grep -E "([0-9]{1,3}\.){3}\.[0-9]{1,3}" /etc/sysconfig/network-scripts/ifcfg-eth0

grep "[0-9]\{1,3\}\.\"{3\}\.[0-9]\{1,3\} /etc/sysconfig/network-scripts/ifcfg-eth0

##解析

1.^[0-9]锚定开头的数字使用\(...\) \1将^[0-9]传递给\1$用来锚定结尾

2.首先grep提出去含有inet addr的内容,-v取出‘127.0.0.1’使用cut命令 -d来截取第一个字段

3. 使用-E解法([0-9])\{1,3}[0-9]的数字至少出现1次,至多出现3次\. 转义 . 符号{3} 显示三次前面()的内容\.[0-9]{1,3}匹配后面的3位数字

grep解法可以自己琢磨下

分享到:
评论

相关推荐

    文本三剑客之grep及正则表达式 -.pdf

    3. grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返 回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理...

    第二十四章:shell脚本-正则、grep、sed、awk三剑客1

    3.基础正则表达式: ^word 搜索以word开头的 4.扩展的正则表达式:ERE(egrep或grep -E) + 重复一次或一次以上前面的一个字符 5.理

    shell脚本之正则表达式、grep、sed、awk

    主要介绍了shell脚本之正则表达式、grep、sed、awk的相关知识,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下

    Linux Shell脚本的编程之正则表达式

    2 通配符是用来匹配符合条件的文件名,通配符是完全匹配,ls,find,cp这些命令不支持正则表达式,所以只能用Shell自己的通配符来进行匹配了。 二 基础正则表达式 这里引用兄弟连的测试文本   1 * 前一个字符匹配...

    shell编程指南,shell脚本,本书共分五部分全。grep家族,sed,AWK,正则表达式,tr用法

    第7章 正则表达式介绍 49 第8章 grep家族 56 第9章 AWK介绍 66 第10章 sed 用法介绍 89 第11章 合并与分割 104 第12章 tr用法 119 第三部分 登录环境 第13章 登录环境 125 第14章 环境和shell变量 132 第15章 引号...

    Shell脚本中通过正则表达式匹配IP地址

    主要介绍了Shell脚本中通过正则表达式匹配IP地址,本文直接给出实现代码,需要的朋友可以参考下

    shell脚本-正则、grep、sed、awk三剑客

    在企业工作中,每天做的Linux运维工作中,时刻都会面对大量带有字符串的文本配置、程序、命令输出及日志文件等,而我们经常会有迫切的...这就需要正则表达式,因此,可以说正则表达式就是为过滤这样的字符串而生的。

    Shell正则表达式验证IP地址

    本机多个IP 代码如下: ifconfig | awk ‘/inet/{print $2}’ | awk -F: ‘{print $2}... echo $1 |grep “^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$” &gt; /dev/null  if [ $? = 1 ]; then  retur

    shell模糊匹配与正则详解

    正则表达式的基本元素包括普通字符和元字符,在Linux shell里面,常用的正则表达式元字符集为:S={* . ^ $ [] \ \&lt;\&gt; \{\} \{n,\} \{n,m\} },每一个元字符都有自己在正则表达式中的含义,下面来介绍一下...

    Shell脚本判断IP地址是否合法的方法

    使用shell校验IP地址合法性 使用方法: 代码如下:[root@yang python]# bash check_ip.sh IP地址执行结果:返回值0校验合法,非0不合法。shell代码: 代码如下:[root@yang python]# vi check_ip.sh #!/usr/bin/...

    alacritty-color-export:基于正则表达式的解决方案,将生成的(沃尔)颜色导出到Alacritty配置中

    Alacritty颜色导出一种临时的,基于正则表达式的解决方案,可使用一个命令将生成的(沃尔)颜色导出到Alacritty配置中。 已在Alacritty(0.3.3、0.4.2-dev, 0.6.0 )的macOS(10.14.6、10.15.2、11.2.1)上进行了...

    Linux系统指令:文件内容查询工具Grep

    Grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。linux使用GNU版本的Grep。它功能更强,可以通过-G、-E、-F命令行选项来使用eGrep和fGrep的功能。Grep的工作方式是这样的,它在一...

    UNIX/LINUX SHELL 正则表达式语法详解附使用方法

    命令行实用工具如何使用正则表达式 来去芜取精。 非常奇怪,直到今天我仍然能重复周六早上的经典歌曲“Conjunction Junction”。这是好事(看了太多电视)还是坏事(也许是我现在职业的先兆)仍然有待讨论。不管...

    grep命令调研文档

    Grep (global search regular expression(RE) and print ... Grep可用于shell脚本,因为Grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则...

    Shell脚本学习笔记

    第7章 sed、gawk介绍与正则表达式 120 7.1 sed编辑器 120 7.1.1 在命令行中定义编辑器命令 120 7.1.2 在命令行中使用多个编辑器命令 121 7.1.3 从文件读取编辑器命令 121 7.2 gawk程序 122 7.2.1 gawk命令格式 122 ...

    shell从入门到精通

    shell基础知识、shell字符串处理、shell表达式与运算符、shell流程控制、shell函数与数组、shell正则表达式、shell文本处理三剑客(grep、sed、awk)、shell标准输入、输出和错误、shell信号发送与捕捉、shell编程时...

    一天一个shell命令 linux文本内容操作系列-grep命令详解

    Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。 shell,perl,...

    Linux shell脚本 精华中文版

    007_文本过滤_正则表达式.pdf 008_grep家族.pdf 009_awk介绍.pdf 010_sed用法介绍.pdf 011_合并与分割_sort_join_uniq_cut_paste_split.pdf 012_tr的用法.pdf 013_登录环境.pdf 014_环境和shell变量.pdf ...

Global site tag (gtag.js) - Google Analytics