grep命令

简介

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

作用

文本搜索工具,根据用户指定的“模式(过滤条件)”对目标文本逐行进行匹配检查;打印匹配到的行;

模式

由正则表达式的元字符及文本字符所编写出的过滤条件;

格式

grep  [OPTIONS]  PATTERN  [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

选项

  • -a --text #不要忽略二进制的数据。
  • -A<显示行数> --after-context=<显示行数> #除了显示符合范本样式的那一列之外,并显示该行之后的内容。
  • -b --byte-offset #在显示符合样式的那一行之前,标示出该行第一个字符的编号。
  • -B<显示行数> --before-context=<显示行数> #除了显示符合样式的那一行之外,并显示该行之前的内容。
  • -c --count #计算符合样式的列数。
  • -C<显示行数> --context=<显示行数>或-<显示行数> #除了显示符合样式的那一行之外,并显示该行之前后的内容。
  • -d <动作> --directories=<动作> #当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
  • -e<范本样式> --regexp=<范本样式> #指定字符串做为查找文件内容的样式。
  • -E --extended-regexp #将样式为延伸的普通表示法来使用。
  • -f<规则文件> --file=<规则文件> #指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
  • -F --fixed-regexp #将样式视为固定字符串的列表。
  • -G --basic-regexp #将样式视为普通的表示法来使用。
  • -h --no-filename #在显示符合样式的那一行之前,不标示该行所属的文件名称。
  • -H --with-filename #在显示符合样式的那一行之前,表示该行所属的文件名称。
  • -i --ignore-case #忽略字符大小写的差别。
  • -l --file-with-matches #列出文件内容符合指定的样式的文件名称。
  • -L --files-without-match #列出文件内容不符合指定的样式的文件名称。
  • -n --line-number #在显示符合样式的那一行之前,标示出该行的列数编号。
  • -q --quiet或--silent #不显示任何信息。
  • -r --recursive #此参数的效果和指定“-d recurse”参数相同。
  • -s --no-messages #不显示错误信息。
  • -v --revert-match #显示不包含匹配文本的所有行。
  • -V --version #显示版本信息。
  • -w --word-regexp #只显示全字符合的列。
  • -x --line-regexp #只显示全列符合的列。
  • -y #此参数的效果和指定“-i”参数相同。
  • --color=auto:对匹配到的文本着色后高亮显示;

基本正则表达式

字符匹配

  • . :匹配任意单个字符;
  • []:匹配指定范围内的任意单个字符;
  • [^]:匹配指定范围外的任意单个字符;

匹配次数

用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数;默认工作于贪婪模式;

  • *:匹配其前面的字符任意次;0,1,多次;
  • .*:匹配任意长度的任意字符
  • \?:匹配其前面的字符0次或1次;即其前面的字符是可有可无的;
  • \+:匹配其前面的字符1次或多次;即其面的字符要出现至少1次;
  • \{m\}:匹配其前面的字符m次;
  • \{m,n\}:匹配其前面的字符至少m次,至多n次;
    • \{0,n\}:至多n次
    • \{m,\}:至少m次

位置锚定

  • ^:行首锚定;用于模式的最左侧;
  • $:行尾锚定;用于模式的最右侧;
  • ^PATTERN$:用于PATTERN来匹配整行;
    • ^$:空白行;
    • ^[[:space:]]*$:空行或包含空白字符的行;
  • \< 或 \b:词首锚定,用于单词模式的左侧;
  • \> 或 \b:词尾锚定,用于单词模式的右侧;
  • \<PATTERN\>:匹配完整单词;

单词:非特殊字符组成的连续字符(字符串)都称为单词;

分组及引用

  • \(\):将一个或多个字符捆绑在一起,当作一个整体进行处理;

Note:分组括号中的模式匹配 到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为:
\1:模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符;
\2:模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符;

POSIX字符

为了在不同国家的字符编码中保持一至,POSIX(The Portable Operating System Interface)增加了特殊的字符类,如[:alnum:]是[A-Za-z0-9]的另一个写法。要把它们放到[]号内才能成为正则表达式,如[A- Za-z0-9]或[[:alnum:]]。在linux下的grep除fgrep外,都支持POSIX的字符类。

  • [:alnum:] #文字数字字符
  • [:alpha:] #文字字符
  • [:digit:] #数字字符
  • [:graph:] #非空字符(非空格、控制字符)
  • [:lower:] #小写字符
  • [:cntrl:] #控制字符
  • [:print:] #非空字符(包括空格)
  • [:punct:] #标点符号
  • [:space:] #所有空白字符(新行,空格,制表符)
  • [:upper:] #大写字符
  • [:xdigit:] #十六进制数字(0-9,a-f,A-F)

egrep命令

egrep命令是支持扩展的正则表达式实现类似于grep文本过滤功能;grep -E就相当于egrep,这里不区分两个命令只是需要将扩展正则表达式说明下。

扩展正则表达式的元字符

字符匹配

  • .:任意单个字符
  • []:指定范围内的任意单个字符
  • [^]:指定范围外的任意单个字符

次数匹配

  • *:任意次,0,1或多次;
  • ?:0次或1次,其前的字符是可有可无的;
  • +:其前字符至少1次;
  • {m}:其前的字符m次;
  • {m,n}:至少m次,至多n次;
    • {0,n}
    • {m,}

位置锚定

  • ^:行首锚定;
  • $:行尾锚定;
  • \<, \b:词首锚定;
  • \>, \b:词尾锚定;

分组及引用

  • ():分组;括号内的模式匹配到的字符会被记录于正则表达式引擎的内部变量中;

  • a|b:a或者b;

    • C|cat:C或cat
    • (c|C)at:cat或Cat

使用举例

显示/etc/passwd文件中不以/bin/bash结尾的行:

# grep -v  "/bin/bash$" /etc/passwd

找出/etc/passwd文件中的两位数或三位数

# egrep "[0-9]\{2,3\}" /etc/passwd

找出/etc/rc.d/rc.sysinit和/etc/grub2.cfg文件中,以至少一个空白字符开头,且后面非空白字符的行

# egrep "^[[:space:]]+[^[:space:]]" /etc/grub2.cfg /etc/rc.d/init.d/functions

找出"netstat -tan"命令的结果中以'LISTEN'后跟0、1或多个空白字符结尾的行

# netstat -tan | grep  "LISTEN[[:space:]]*$"

找出/proc/meminfo文件中,所有以大写或小写S开头的行;至少有三种实现方式;

# egrep "^[sS]"   /proc/meminfo
# egrep "^(s|S)" /proc/meminfo
# grep -i "^s" /proc/meminfo

显示当前系统上root、centos或fedora用户的相关信息;

# egrep "^(root|centos|fedora)\>" /etc/passwd

找出/etc/rc.d/init.d/functions文件中某单词后面跟一个小括号的行;

# egrep -o  "\<.*\>\(\)" /etc/rc.d/init.d/functions
# grep -E -o "[_[:alnum:]]+\(\)" /etc/rc.d/init.d/functions

使用echo命令输出一绝对路径,使用egrep取出基名;

# echo /etc/sysconfig/ | grep  -E  -o  "[^/]+/?$"

找出ifconfig命令结果中的1-255之间的数值

# ifconfig |egrep "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"

找出ifconfig命令结果中的IP地址

# ifconfig |egrep -o "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-1][0-9]|22[0-3])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"
# ifconfig |head -2 |tail -1|cut -d' ' -f 10
# ifconfig |head -2 |tail -1|awk '{print $2}'
# hostname -I |cut -d' ' -f1

找出/etc/passwd文件中用户名同shell名的行

# egrep "^([^:]+\>).*\1$" /etc/passwd

grep命令.md的更多相关文章

  1. linux grep命令

    linux grep命令1.作用Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expressio ...

  2. grep 命令

    简单介绍:grep命令是用于分析一行信息,若当中有我们所需要的信息,就将该行取出来. 语法结构:grep [-acinv] [--color=auto] '查找关键字' #{filename} -a: ...

  3. linux管道命令grep命令参数及用法详解---附使用案例|grep

    功能说明:查找文件里符合条件的字符串. 语 法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>] ...

  4. grep 命令详解

    [root@www ~]# grep [-acinv] [--color=auto] '搜寻字符串' filename 选项与参数: -a :将 binary 文件以 text 文件的方式搜寻数据 - ...

  5. grep 命令操作

    linux grep命令 1.作用Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expressi ...

  6. Linux命令(23)grep命令的使用

    grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正 ...

  7. 每天一个linux命令(39):grep 命令

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

  8. grep命令的使用

    grep是UNIX和LINUX中使用最广泛的命令之一.grep允许对文本文件进行模式查找.如果找到匹配模式, grep打印包含模式的所有行.grep支持基本正则表达式,也支持其扩展集.grep有三种变 ...

  9. 由一条Linux的grep命令说起

    今天在开发的时候,看到同事使用了这样的一条linux命令 grep 'class YourClass' -rwi * |grep -v svn 想到了 grep命令的,几个参数. -r 明确要求搜索子 ...

随机推荐

  1. BOM-使用定时器

    window对象包含4个定时器专用方法,说明如下表所示,使用它们可以实现代码定时运行,避免连续执行,这样可以设计动画 方法 说明 setInterval() 按照指定的周期,(以毫秒为单位)来调用函数 ...

  2. git 找回 git reset --hard HEAD 后的代码

    下面方法只针对当你本地代码做了 git add 或则 git commit 后又手贱的重置本地代码到上一个版本,导致本地代码丢失的情况. 如果你没有 git add 命令,而直接 git reset ...

  3. WebApi使用swagger ui自动生成接口文档

    之前就写到.最近正在使用webapi.这里介绍一个实用的东西swageer ui现在开发都是前后端分开.我们这里是给前端提供api.有时候对于一个api的描述,并不想专门写一份文档.很浪费时间.swa ...

  4. maven配置Mac平台

    Mac OS X 安装Maven: 下载 Maven, 并解压到某个目录.例如/Users/robbie/apache-maven-3.3.3 打开Terminal,输入以下命令,设置Maven cl ...

  5. 我用ASP.NET缓存之SQL数据缓存依赖(SqlCacheDependency)

    [名词解释] 缓存(Cache)依赖,大白话解释就是缓存是否更新依赖于其它Object.那么SqlCacheDependency指的就是Cache的数据更新依赖于SQL Server数据库表的变化(  ...

  6. 在SecureCRT中给linux上传和下载文件

    下载:sz中的s意为send(发送),告诉客户端,我(服务器)要发送文件 send to cilent,就等同于客户端在下载. 上传:rz中的r意为received(接收),告诉客户端,我(服务器)要 ...

  7. php 多次导入文件导致 Cannot redeclare class

    定义了类A b.php中导入了A c.php中导入了b.php c.php中导入A会报错:

  8. ASP.NET Core 2 学习笔记(十四)Filters

    Filter是延续ASP.NET MVC的产物,同样保留了五种的Filter,分别是Authorization Filter.Resource Filter.Action Filter.Excepti ...

  9. 通过编写聊天程序来熟悉python中多线程及socket的用法

    1.引言 Python中提供了丰富的开源库,方便开发者快速就搭建好自己所需要的应用程序.本文通过编写基于tcp/ip协议的通信程序来熟悉python中socket以及多线程的使用. 2.python中 ...

  10. request获取当前用户

    1.request.getRemoteUser();//获取当前缓存的用户,比如Spring Security做权限控制后就会将用户登录名缓存到这里 request.getRemoteAddr();/ ...