Linux中正则表达式和grep的使用

正则表达式在Linux经常配合grepsedawk等用于搜寻关键字。正则表达式分为正则表达式和扩展正则表达式:
一、正则表达式
1.1 元字符:
.:匹配任意字符   
[]:匹配[]中的任意一个字符
[^]:匹配[]以外的任意字符
[:alpha:]大小写英文字母
[:digit:]:十进制数字
[:xdigit:]:十六进制数字
[:upper:]:大写字母
[:lower:]:小写字母
[:space:]:空格
[:punct:]:标点符号
[:blank:]:空格和制表符(TAB
[:alnum:]:所有字母和数字
[:print:]:可打印字符
[:graph:]:可打印的非空白字符
1.2 位置锚定:

^:锚定行首
$:锚定行尾
^$:空行
^PATTERN$:锚定整行
^[[:space:]]$:空白行
\b PATTERN\b |  \< PATTERN\>:匹配整个单词
\b | \<:词首锚定
\b | \>:词尾锚定
1.3 匹配次数:

*:匹配其前面字符任意次,最少0次,最多不限
.*:匹配任意字符任意次
\{n,m\}:匹配其前面字符最少n次,最多m
\{n\}:匹配其前面字符n
\{n,\}:匹配其前面字符至少n
\{,m\}:匹配其前面字符至多m
\+:匹配其前面字符至少1次,至多无限次
\?:匹配其前面字符0次或1次,最多1
1.4 分组
\PATTERN\\1 \1表示和前面\\)中的内容相同,引用前面的内容
1.5 
|
a \| b:表示ab

二、扩展正则表达式

扩展正则表达式和基本正则表达式差别不大,一下为有差别的部分:
+:匹配其前面字符至少1次,至多无限次
?:匹配其前面字符0次或1次,最多1
{n,m}:匹配其前面字符最少n次,最多m
{n,}:匹配其前面字符至少n
{,m}:匹配其前面字符至多m
{n}:匹配其前面字符n

三、grep命令:用于匹配关键字,支持正则表达式

grep [OPTIONS] PATTERN [FILE…]
常用参数:
  -e:同时匹配多个结果,多个结果之间为并列的关系
  -i:忽略大小写
  -c:匹配统计的行数
  -E:采用扩展正则表达式,相当于egrep
  -o:只显示匹配到的结果
  -n:显示行号
  -v:取反
  -C #:显示匹配结果上下#
  -A #:显示匹配结果下面#
  -B #:显示匹配结果上面#
  -w:匹配整个单词
  -q:静默输出,常用在脚本中,取$?的值

四、例题:
1、显示三个用户rootmagewangUID和默认shell
cat /etc/passwd|egrep “^root|^mage|^wang”|cut -d: -f 1,3
2、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行
[root@localhost script]# cat /etc/rc.d/init.d/functions |egrep “^[_[:alpha:]]+\(\)”
3、使用egrep取出/etc/rc.d/init.d/functions中其基名
[root@localhost script]# echo “/etc/rc.d/init.d/function”|egrep -o “/[[:alpha:]]+$”|cut -d”/”
-f2
4、使用egrep取出上面路径的目录名
[root@localhost script]# echo “/etc/rc.d/init.d/function”|egrep -o “/.*/”
5、利用扩展正则表达式分别表示0-910-99100-199200-249250-255
egrep “[0-9]{1}”
egrep “[0-9]{2}”
egrep “[0-9]{3}”
egrep “2[0-4]{1}[0-9]{1}”
egrep “25[0-5]{1}”
6、显示ifconfig命令结果中所有IPv4地址
ifconfig  | egrep  -o “([0-9]{1,3}\.){3}[0-9]{1,3}”
7、将此字符串:welcome to  magedu linux 中的每个字符去重并排序,重复次数多的排到前面
[root@localhost script]# echo “welcome to magedu linux”|egrep -o “[[:alpha:]]”|sort|uniq -c|so
rt -rn                    

原创文章,作者:王子豪,如若转载,请注明出处:http://www.178linux.com/72773

(0)
王子豪王子豪
上一篇 2017-04-08 15:54
下一篇 2017-04-08 16:06

相关推荐

  • 设计模式 ( 十三 ) 命令模式Command(对象行为型)

    1.概述         在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计,使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活。  例子1:电视机遥控器…

    Linux干货 2015-07-16
  • Linux获取命令帮助的途径

    在学习和使用Linux的过程中,免不了会遇到一些我们不熟悉或者不知道的命令。对于这些我们不熟悉的命令,就需要查找帮助文档来获取更多信息来协助我们完成相关的工作。 如何获取Linux命令的使用帮助? 1.  针对内部命令 help [命令名] 2.  针对外部命令 [命令名] –help,    获取简要帮助…

    Linux干货 2017-09-01
  • linux再次入门

               时隔一年,重新拾起Linux,从头开始再学一遍            现在来总结一下曾经可能听说过但是我以前绝对不会的命令(尴尬脸) 克隆窗口:右键单击点克隆窗口(真是…

    2017-07-15
  • FHS文件结构

    我们在前面学习的过程中有了解到,linux的发现版有很多种类型,那么如果每个版本都有着自己的想法去配置文件应该放置的目录,那么将造成管理上的困扰,于是为了解决这个问题,就有了FHS标准。 1.1 FHS 结构 1.1.1 软件的概念 之前,我们提到过,一个完整的计算机系统应该有两部分组成,即:计算机系统=软件+硬件。没有软件的硬件,计算机只不过是一堆只会发热…

    Linux干货 2016-10-27
  • N25期第一周作业

    计算机的组成与功能  一台能正常工作的计算机有硬件和软件组成,计算机的硬件就好比人的躯体,计算机的软件就好比人的思想,人的思想控制指挥人的躯体,计算机有了软件才能进行工作。 硬件大致由CPU,内存,输入输出设备,存储设备组成,各个部件的主要作用流程是:由输入设备(例如:键盘)输入数据, 数据暂时出入内存, 而后由内存传到CPU(CPU又由运算器+控…

    Linux干货 2016-12-05
  • 第四天作业

    1 、创建 用户gentoo ,附加组为bin 和root ,默认shell为/bin/csh ,注释信息为"Gentoo Distribution" 1 useradd -G bin,root -s /bin/csh -c "Gentoo Distribut…

    Linux干货 2016-08-04