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. jQuery操作<input type="radio">

    input type="radio">如下: <input type="radio" name="city" value=&qu ...

  2. SpringBoot配置——@PropertySource、@ImportResource、@Bean

    @PropertySource:加载指定的配置文件 package com.hoje.springboot.bean; import org.springframework.beans.factory ...

  3. CentOS 7 搭建PXC 数据库集群

    CentOS 7 搭建PXC 数据库集群 PXC( Percona XtraDB Cluster ) 特点如下: 1.同步复制,事务要么在所有节点提交或不提交,保证了数据的强一致性. 2.多主复制,可 ...

  4. 超级简单的jquery轮播图demo

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. css盒模型(Box Model)

    所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用. CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:边距,边框,填充,和 ...

  6. ajax 异步请求返回只刷新一次页面

    success:function (res) { if (res == "ok") { // $('#dg').bootstrapTable(('refresh')); if (l ...

  7. 计时器(Chronometer)

    计时器(Chronometer) 常用属性:format(计时器的计时格式) 常用方法: setBase(long base) 设置计时器的起始时间 setFormat(String format) ...

  8. 强网杯2018 pwn复现

    前言 本文对强网杯 中除了 2 个内核题以外的 6 个 pwn 题的利用方式进行记录.题目真心不错 程序和 exp: https://gitee.com/hac425/blog_data/blob/m ...

  9. centos7安装magento随记 这就是个坑,果断放弃

    在centos7通过yum安装PHP7,首先在终端运行:rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm提示错误:er ...

  10. The directory '/home/stone/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If execu

    使用sudo pip install ......的时候出现下面一段黄色的代码: The directory '/home/stone/.cache/pip/http' or its parent d ...