Linux grep命令用法详解

grep: Global search regular expression and print out the line.
作用:文本搜索工具,根据用户指定的“模式(过滤条件)”对目标文件逐行进行匹配检查,打印匹配的行
模式:由正则表达式的元字符及文本字符所编写出的过滤条件

grep [OPTIONS] PATTERN [FILE…]

    OPTIONS:
        --color=auto:对匹配到的文本着色后高亮显示
        -i, --ignore-case:忽略字符的大小写
        -o, --only-matching:仅显示匹配到的字符串本身
        -v, --invert-match:显示不能被模式匹配到的行
        -E, --extended-regexp:支持使用扩展的正则表达式元字符
        -q, --quiet, --silent:静默模式,即不输出任何信息
        -A #:after,显示匹配到行和向后#行
        -B #:before,显示匹配到行和前#行
        -C #:context,显示匹配到行和前后各#行

    正则表达式分为两种:1.基本正则表达式  2.扩展正则表达式

    PATTERN,正则表达式(这里用到是基本正则表达式)
            基本正则表达式有四种匹配模式:1.字符匹配   2.匹配次数  3.位置锚定  4.分组及应用
                1.字符匹配:
                    .(英文的点):匹配任意单个字符
                    []:匹配指定范围内的任意单个字符
                    [^]:匹配指定范围外的任意单个字符
                    特殊:[:digit:]、[:lower:]、[:upper:]、[:alpha:]、[:alnum:]、[:punct:]、[:space:]
                2.匹配次数:
                    *:匹配其前面的字符任意次(0,1,多次)
                    .*:匹配任意长度的任意字符
                    \?:匹配其前面的字符0次或1次,即其前面的字符是可有可无的
                    \+:匹配其前面的字符1次或多次,即其面的字符要出现至少1次
                    \{#\}:匹配其前面的字符#次
                    \{m,n\}:匹配其前面的字符至少m次,至多n次
                            \{0,n\}:至多n次
                            \{m,\}:至少m次
                3.位置锚定
                    ^:行首锚定,用于模式的最左侧
                    $:行尾锚定,用户模式的最右侧
                    ^PATTERN$:用于parrern来匹配整行
                            ^$:空白行
                            ^[[:space:]]*$:空行或包含空白字符的行
                    \<或\b:词首锚定,用于单词模式的左侧
                    \>或\b:词尾锚定,用于单词模式的右侧
                    \<PARRERN\>:匹配完整单词
                4.分组及应用:
                    \(\):将一个或多个字符捆绑在一起,当做一个整体进行处理
                    note:分组括号中的模式匹配到的内容会被正则表达式引擎自动记录于内部的变量中
                            \1:模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符
                            \2:模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符

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

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

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

grep ‘[1-9]\{1,2\}[1-9]‘  /etc/passwd

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

grep ‘^[[:space:]]\+[[:alpha:]]‘ test.txt

4.找出”netstat -tan”命令的结果中以’LISTEN’后跟0,1或多个空白字符结尾行

netstat -tan | grep ‘LISTEN[[:space:]].*$‘

5.创建test.txt文件内容如下:
He love his lover
He likes his lover
She likes her liker
She loves her liker
查找单词中出现 l和e之间存在两个字符,且一行中要出现两次查找到的内容。

grep ‘\(l..e\).*\1‘ test.txt

egrep命令:支持扩展的正则表达式实现类似于grep文本过滤功能

egrep [OPTIONS] PATTERN [FILE...]
    OPTIONS
        -l, -o, -v, -q, -A, -B, -C(跟上述的grep功能一样,这里就不再累述)
        -G:支持基本正则表达式
    PATTERN,正则表达式(这里的正则表达式用到是扩展表达式)
        扩展正则表达式也有四种匹配模式:1.字符匹配   2.匹配次数  3.位置锚定  4.分组及应用
            字符匹配和位置锚定跟grep用法一样这里不再累述
            次数匹配:用法还是跟上述一样。但是扩展正则表达式?,+,{,}不需要用\来转义
            分组及引用:用法还是跟上述一样。但是扩展正则表达式括号不需要用\来转义。还有新的一个功能 或(|) 。例如 (c|C)at:cat或者Cat

例题:
1.找出/proc/meminfo文件中,所有在大写或小写S开头的行,至少有两种实现方式

egrep "^(S|s)" /proc/meminfo
egrep ^[Ss] /proc/meminfo

2.显示当前系统上root、Python、maintain用户的相关信息

egrep ^\(root\|python\|maintain\) /etc/passwd

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

grep "[[:alpha:]]\+(" /etc/rc.d/init.d/functions
egrep ‘[[:alpha:]]\+|\)|\(‘ /etc/rc.d/init.d/functions

4.使用echo命令输出一绝对路径,使用egrep取出几名

echo /home/maintain/test.txt | grep -E -o "[^/]+/?$"

5.进一步:取出其路径名;类似于对执行dirname命令结果
找出ifconfig命令结果中的1-255之间的数值

ifconfig eth0 | egrep -o "[1-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]"

6.添加用户bash,testbash,basher以及nologin(其中shell为/sbin/nologin),而后找出/etc/passwd文件中用户名同shell名行

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

扩展题:找出ifconfig命令结果中的IP地址

ifconfig eth0 | grep "inet " | sed ‘s/[[:space:]]\+inet //‘ | sed "s/  .*//"

fgrep命令:不支持正则表达式元字符
当无需要用到元字符去编写模式时,使用fgrep必能更好

原文地址:https://blog.51cto.com/14192118/2412374

时间: 2024-08-26 06:39:33

Linux grep命令用法详解的相关文章

linux wget 命令用法详解(附实例说明)

Linux wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到本地服务器.如果我们使用虚拟主机,处理这样的事务我们只能先从远程服务器下载到我们电脑磁盘,然后再用ftp工具上传到服务器.这样既浪费时间又浪费精力,那不没办法的事.而到了Linux VPS,它则可以直接下载到服务器而不用经过上传这一步.wget工具体积小但功能完善,它支持断点下载功能,同时支持FTP和HTTP下载方式,支持代理服务器和设置起来

Linux find命令用法详解

find命令:实时查找工具,通过遍历指定起始路径下文件系统层级结构完成文件查找工作特性:1.查找速度略慢 2.精确查找 3.实时查找 用法:find [OPTIONS] [查找起始路径] [查找条件] -[处理动作] 查找条件: 根据文件从属关系查找: -user username:查找属主指定用户的所有文件 -group groupname:查找属组指定组的所有文件 -uid UID:搜索属主指定的UID的所有文件 -group GID:查找属组指定的GID的所有文件 -nouser:查找没有

Linux more 命令用法详解

名称:more  说明:类似 cat ,不过会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似),使用中的说明文件,请按 h . 参数:-num 一次显示的行数 -d 提示使用者,在画面下方显示 [Press space to continue, 'q' to quit.] ,如果使用者按错键,则会显示 [Press 'h' for instructions.] 而不是 '哔

linux nc命令使用详解(转)

linux nc命令使用详解 功能说明:功能强大的网络工具 语 法:nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>][-s<来源位址>][-v...][-w<超时秒数>][主机名称][通信端口...] 参 数: -g<网关> 设置路由器跃程通信网关,最丢哦可设置8个. -G<指向器数目> 设置来源路由指向器,其数值为4的

【转】 wget 命令用法详解

wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上.它有以下功能和特点:(1)支持断点下传功能:这一点,也是网络蚂蚁和FlashGet当年最大的卖点,现在,Wget也可以使用此功能,那些网络不是太好的用户可以放心了:(2)同时支持FTP和HTTP下载方式:尽管现在大部分软件可以使用HTTP方式下载,但是,有些时候,仍然需要使用FTP方式下载软件:(3)支持代理服务器:对安全强度很高的系统而言,一般不会将自己的系统直接暴

Tar命令用法详解

tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个.下面的参数是根据需要在压缩或解压档案时可选的. -z:有gzip属性的-j:有bz2属性的-Z:有compress属性的-v:显示所有过程-O:将文件解开到标准输出 下面的参数-f是必须的 -f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名. # tar -cf all.tar *.jp

(转)linux nc命令使用详解

linux nc命令使用详解 原文:https://www.2cto.com/os/201306/220971.html 功能说明:功能强大的网络工具 语 法:nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>][-s<来源位址>][-v...][-w<超时秒数>][主机名称][通信端口...] 参 数: -g<网关>  设置路由器跃程

install 命令用法详解

install 命令用法详解 http://man.linuxde.net/install install命令的作用是安装或升级软件或备份数据,它的使用权限是所有用户.install命令和cp命令类似,都可以将文件/目录拷贝到指定的地点. 但是,install允许你控制目标文件的属性. install通常用于程序的makefile,使用它来将程序拷贝到目标(安装)目录  make install 语法 install [OPTION]... [-T] SOURCE DEST install [O

Linux常用命令与详解

Linux常用命令与详解 在Linux系统中文件删除.创建.更改等操作都是通过一个个不同的命令来完成我们想要的操作,那么什么是命令呢? 凡是在字符操作界面中输入的能够完成特定操作和任务的字符串都可以称为命令.严格来说,命令通常只代表了实现某一类功能的指令或程序的名称. 下面我们就来了解Linux系统中命令的分类有哪些?命令行的组成格式有哪些?常用的命令有哪些? Linux命令的分类 内部命令 内部命令是指集成于 Shell 解释器程序内部的一些特殊指令,也称为内建指令.内部命令无须从硬盘中重新读