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. JVM之---垃圾回收

    JVM通过GC来回收堆和方法区中的内存,GC的基本原理首先会找到程序中不再被使用的对象,然后回收这些对象所占用的内存. 1.收集器 通常采用收集器的方式实现GC,主要的收集器有引用计数收集器和跟踪收集 ...

  2. vs2017调试源代码

    最近刚入职 ,带我得导师发给我一堆项目,什么云端和医院端,各种wcf服务.window服务和一些公共类库来回调用.搞得是迷迷糊糊,晕头转向.反正是一脸大萌比... 不过经过几个日日夜夜得不停奋战,大致 ...

  3. HTML的代码规范

    一.语法 用两个空格来代替制表符(tab) 2.嵌套元素应当缩进一次(即两个空格). 3.对于属性的定义,确保全部使用双引号,绝不要使用单引号. 4.不要省略可选的结束标签(例如,</li> ...

  4. angular基于ui-router实现系统权限控制

    前端去实现权限控制听起来有点扯淡(实际也有点扯淡),掩耳盗铃,主要是担心安全问题,但是如果在前后端分离的情况下,需要做一个带有权限控制的后台管理系统,angular基于ui-router应该怎么做呢? ...

  5. 用Jquery去写树结构

    <!DOCTYPEhtml> <html> <head> <metacharset="utf-8"> <title>Tr ...

  6. js/jq动态创建表格的行与列

    之前做了一个项目,需求是能动态创建表格行,动态创建表格的列,度了很多资料,都没有动态创建列的插件,所以自己动手写了一个 需求大概是(下图) 1.动态添加一行.2.动态添加一列,3.删除行.4.删除列, ...

  7. 前端微信小程序实战篇

    电商底部导航栏的制作 我想大家对电商一定不陌生,一般电商的底部导航栏有以下几个首页.分类.购物车.个人中心. app.json是用来配置page路径以及导航栏属性的,那我们要做首页.分类.购物车.个人 ...

  8. 直接拿去用!每个App都会用到的LoadingLayout

    前言 项目里都会遇到几种页面,分别为加载中.无网络.无数据.出错四种情况,经常要使用,所以封成库引用了,方便使用,顺便分享出来.先看一下效果: 原理比较简单,继承FrameLayout,在xml渲染完 ...

  9. DDL为什么不能rollback?

    转自 http://blog.csdn.net/dba_waterbin/article/details/8621367 在Oracle中DDL语句将转化为对数据字典表的DML语句:比如,一个简单的修 ...

  10. Python 应用剖析工具介绍

    [编者按]本文作者为来自 HumanGeo 的工程师 Davis,主要介绍了用于 Python 应用性能分析的几个工具.由国内 ITOM 管理平台 OneAPM 编译呈现. 在 HumanGeo,我们 ...