Skip to content
KARINKARIN
博客主页
项目总览
知识要点
捣鼓折腾
Git笔记
Excel修炼秘籍
github icon
  • 博客主页
    • 项目总览
          • Shell脚本笔记
            • Shell脚本介绍
              • Shell语法
                • Shell格式化输出
                  • Shell格式化输入
                    • Shell变量
                      • Shell数组
                        • Shell运算
                          • Shell流程控制---if判断语句
                            • Shell流程控制---for循环语句
                              • Shell流程控制---while循环语句
                                • Shell流程控制---until循环语句
                                  • Shell流程控制---case分支语句
                                    • Shell函数
                                      • Shell正则表达式
                                        • Shell对文本的搜索---grep命令
                                          • 介绍
                                            • grep 命令
                                              • 黄金搭档
                                                • sort 命令
                                                  • find 命令
                                                    • xargs 命令
                                                      • 小知识:xargs 与管道 | 的区别
                                                    • Shell对文件的操作---sed命令
                                                      • Shell对输出流的处理---awk命令
                                                        • Shell监控脚本
                                                          • Shell脚本---lamp环境安装

                                                        Shell对文本的搜索---grep命令

                                                        author iconkarincalendar icon2021年4月9日category icon
                                                        • 教程
                                                        tag icon
                                                        • shell
                                                        timer icon大约 5 分钟

                                                        此页内容
                                                        • 介绍
                                                        • grep 命令
                                                        • 黄金搭档
                                                          • sort 命令
                                                          • find 命令
                                                          • xargs 命令
                                                          • 小知识:xargs 与管道 | 的区别

                                                        # 介绍

                                                        grep 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。这也是一个我们比较常用的命令之一,好多时候虽然没通过系统的学习,但是我们还是会经常用到。当文本为标准输入时,经常和管道符 | 结合使用。

                                                        # grep 命令

                                                        命令格式如下:

                                                        [root@localhost ~]# grep [选项] [模式] [文件]
                                                        选项:
                                                        	-E	:pattern被视为一个扩展的正则表达式;egrep
                                                        	-F	:pattern是一个以换行符隔开的字符串集合;fgrep不承认正则表达式
                                                        	-c	:计算匹配到的行数
                                                        	-r	:第归搜索
                                                        	-n	:显示匹配内容的行号
                                                        	-i	:不区分大小写
                                                        	-v	:反向选择,即选择不匹配的行
                                                        	-c	:只显示匹配行总数    
                                                        	-w	:匹配整词
                                                        	-x	:匹配整行
                                                        	-l	:只显示文件名,不显示内容
                                                        	-s	:不显示错误信息
                                                        	--color=auto	:搜索匹配的关键词显示颜色
                                                        
                                                        模式:
                                                        	要搜索的字符串或正则表达式
                                                        
                                                        文件:
                                                        	即要搜索匹配的源文件或者标准输入,标准输入常用管道符 | 连接grep
                                                        
                                                        1
                                                        2
                                                        3
                                                        4
                                                        5
                                                        6
                                                        7
                                                        8
                                                        9
                                                        10
                                                        11
                                                        12
                                                        13
                                                        14
                                                        15
                                                        16
                                                        17
                                                        18
                                                        19
                                                        20
                                                        21
                                                        • 来自文件
                                                        [root@localhost ~ ]# cat /etc/passwd | grep "root" 
                                                        root:x:0:0:root:/root:/bin/bash
                                                        operator:x:11:0:operator:/root:/sbin/nologin
                                                        
                                                        1
                                                        2
                                                        3
                                                        • 来自标准输入
                                                        [root@localhost ~ ]# cat /etc/passwd | grep "root" 
                                                        root:x:0:0:root:/root:/bin/bash
                                                        operator:x:11:0:operator:/root:/sbin/nologin
                                                        
                                                        1
                                                        2
                                                        3

                                                        当 grep 的输入既来自文件也来自标准输入时,grep 将忽略标准输入的内容不做处理,除非使用符号 - 来代表标准输入。此时,grep 会标明哪些结果来自于文件哪些来自于标准输入。

                                                        [root@localhost ~ ]# cat /etc/passwd | grep root /etc/passwd -
                                                        /etc/passwd:root:x:0:0:root:/root:/bin/bash
                                                        /etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin
                                                        (standard input):root:x:0:0:root:/root:/bin/bash
                                                        (standard input):operator:x:11:0:operator:/root:/sbin/nologin
                                                        
                                                        1
                                                        2
                                                        3
                                                        4
                                                        5

                                                        将 /etc/passwd 文件中,没有出现 root 和 nologin 的行打印出来

                                                        [root@localhost ~ ]# cat /etc/passwd | grep -v root | grep -v nologin
                                                        sync:x:4:65534:sync:/bin:/bin/sync
                                                        speech-dispatcher:x:111:29:Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/false
                                                        whoopsie:x:112:117::/nonexistent:/bin/false
                                                        hplip:x:118:7:HPLIP system user,,,:/var/run/hplip:/bin/false
                                                        gnome-initial-setup:x:120:65534::/run/gnome-initial-setup/:/bin/false
                                                        gdm:x:121:125:Gnome Display Manager:/var/lib/gdm3:/bin/false
                                                        karin:x:1000:1000:karin,,,:/home/karin:/bin/bash
                                                        
                                                        1
                                                        2
                                                        3
                                                        4
                                                        5
                                                        6
                                                        7
                                                        8

                                                        将 /etc/passwd 文件中,结尾是 bash 的行打印出来(正则)

                                                        [root@localhost ~ ]# cat /etc/passwd | grep -E "bash$"
                                                        root:x:0:0:root:/root:/bin/bash
                                                        karin:x:1000:1000:karin,,,:/home/karin:/bin/bash
                                                        
                                                        1
                                                        2
                                                        3

                                                        查找 sshd 进程

                                                        [root@localhost ~ ]# ps -ef | grep sshd
                                                        root       787     1  0 09:56 ?        00:00:00 /usr/sbin/sshd -D
                                                        karin     2855  2763  0 10:35 pts/0    00:00:00 grep --color=auto sshd
                                                        
                                                        1
                                                        2
                                                        3

                                                        # 黄金搭档

                                                        grep 常与 sort、find、xargs 命令组合使用

                                                        # sort 命令

                                                        用于将文本文件内容加以排序。如果未给定文件,则读取标准输入,在将排序好的数据写至标准输出。

                                                        命令格式如下:

                                                        [root@localhost ~ ]# sort [选项] [文件]
                                                        选项:
                                                        	-n	:按数值大小排序 
                                                        	-r	:降序排序 
                                                        	-t	:指定分隔符,和cut命令的-d一个作用 
                                                        	-k	:用-t指定分隔符后,将第几段进行排序,和cut命令的-f一个作用 
                                                        
                                                        1
                                                        2
                                                        3
                                                        4
                                                        5
                                                        6

                                                        将 /etc/passwd 文件中每行内容以冒号为分隔符,选取第三段内容按数值大小排序

                                                        [root@localhost ~ ]# sort -n -t: -k3 /etc/passwd
                                                        
                                                        1

                                                        # find 命令

                                                        find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

                                                        命令格式如下:

                                                        [root@localhost ~ ]# find 路径 [搜索条件] [搜索内容]
                                                        路径:
                                                        #find命令接受一个或多个路径(paths)作为搜索范围,并在该路径下递归地搜索。
                                                        	.	:当前目录
                                                        	~	:家目录
                                                        	/	:根目录
                                                        	
                                                        搜索条件:
                                                        #可根据文件名、文件类型、文件大小等属性进行搜索。
                                                        	-name	:根据文件名(区分大小写),-iname不区分文件名大小写
                                                        	-type	:根据文件类型(f:文件;d:目录;l:符号链接)
                                                        	-empty	:检索为空的文件或目录(-type f ! -empty非空文件)
                                                        	-user	:根据文件或目录的归属
                                                        	-mtime	:根据最后一次文件内容有过更改的时间点(单位为天)
                                                        	-atime	:根据最后一次文件有被读取过的时间点(atime 2两天前)
                                                        	-ctime	:根据最后一次文件有被变更过的时间点(-2两天内;+2超过两天)
                                                        	-c		:根据文件大小(c:字节;k:Kb;M:Mb;G:Gb;+-表示大于小于)
                                                        	-perm	 :根据文件权限
                                                        	
                                                        搜索内容:
                                                        	要搜索的内容
                                                        
                                                        1
                                                        2
                                                        3
                                                        4
                                                        5
                                                        6
                                                        7
                                                        8
                                                        9
                                                        10
                                                        11
                                                        12
                                                        13
                                                        14
                                                        15
                                                        16
                                                        17
                                                        18
                                                        19
                                                        20
                                                        21

                                                        具体请看 linux搜索命令open in new window

                                                        # xargs 命令

                                                        将前一个命令的标准输出传递给下一个命令,作为它的参数,xargs 的默认命令是 echo,空格是默认定界符;将多行输入转换为单行

                                                        命令格式如下:

                                                        [root@localhost ~ ]# [前一个命令] | xargs [选项] [后一个命令]
                                                        选项:
                                                        	-n	:指定一次处理的参数个数
                                                        	-d	:自定义参数界定符
                                                        	-p	:询问是否运行 later command 参数
                                                        	-t	:表示先打印命令,然后再执行
                                                        	-i	:逐项处理
                                                        
                                                        1
                                                        2
                                                        3
                                                        4
                                                        5
                                                        6
                                                        7

                                                        # 小知识:xargs 与管道 | 的区别

                                                        管道 | 用来将前一个命令的标准输出传递到下一个命令的标准输入,xargs 将前一个命令的标准输出传递给下一个命令,作为它的参数。

                                                        edit icon编辑此页open in new window
                                                        上一页
                                                        Shell正则表达式
                                                        下一页
                                                        Shell对文件的操作---sed命令
                                                        MIT Licensed
                                                        Copyright © 2022 karin