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. 封装framework注意点

    1.新建一个framework过程: . 2.在工程内新建一些类,注意,使用xib时初始化必须要加上loadnib:,否则会造成xib无效(可能是因为没有加载) 如下: JFViewControlle ...

  2. Java多态-如何理解父类引用指向子类对象

    java多态,如何理解父类引用指向子类对象 要理解多态性,首先要知道什么是“向上转型”. 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过   Cat c = new ...

  3. BIO、NIO和AIO的区别

    一:事件分离器 在IO读写时,把 IO请求 与 读写操作 分离调配进行,需要用到事件分离器.根据处理机制的不同,事件分离器又分为:同步的Reactor和异步的Proactor. Reactor模型: ...

  4. 商城项目,java返回json数据,报错406

    前言: 项目结构为maven,搭建好架构,整合ssm,进行测试, 从数据库中查询数据,返回json数据,结果报错406 问题: 解决: 1,确定项目中json包是否存在(极大可能出于此) 2,处理器适 ...

  5. python 软件管理规范

    一.背景 软件开发是一个系统工程,当然编码实现是其中尤其重要的一个环节,关乎到功能需求的实现好坏.这个环节中除了编码这一硬功之外,与之相关的编码风格这一柔道,虽然没有直接决定功能的实现与否,但却在很大 ...

  6. Web 开发者学习路线图

      2017 Web 开发者学习路线图(头图源自谷歌) 本文是源自 Github 上 Kamran Ahmed 建立的一个仓库.在文中,作者为他的老教授分享了一组成为前端与后端开发者以及 Devops ...

  7. C#基础 继承和实例化

    有代码如下,问输出的是多少: class Program { static void Main(string[] args) { B b = new B(); Console.ReadKey(); } ...

  8. Android Studio最全插件整理

    在Android开发中,合理的使用Android Studio插件不但可以提高开发效率,还能从整体上提高代码的质量.下面就Android开发中常见的一些插件做一个整理. 1,GsonFormatGso ...

  9. 报表在vista和win7下无法浏览应用的解决办法

     对于vista和win7系统,报表工具有着良好的兼容性,无论是设计器还是实际应用.有些客户在安装报表设计报表的时候没有遇到问题,但是在这两种系统下会发现无法启动应用,或者打开设计器自带的ie浏览 ...

  10. Pig store用法举例

    store:将数据存储到HDFS等文件系统里   将数据保存到/data目录 store data into '/data'; 以逗号为分隔符 store data into '/data' usin ...