一,grep的用途:

linux平台有最常用的三大文本处理工具:awk/sed/grep

grep的功能:搜索指定文件的内容,按照指定的模式匹配,并输出匹配内容所在的行。

需要注意的地方:grep只支持匹配但不能替换匹配到的内容

说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest

对应的源码可以访问这里获取: https://github.com/liuhongdi/

说明:作者:刘宏缔 邮箱: 371125307@qq.com

二,查看grep所属的rpm包

[root@blog ~]# whereis grep
grep: /usr/bin/grep /usr/share/man/man1/grep.1.gz /usr/share/man/man1p/grep.1p.gz /usr/share/info/grep.info.gz [root@blog ~]# rpm -qf /usr/bin/grep
grep-3.1-6.el8.x86_64

如果系统提示找不到grep命令或误删除了命令,

可以用dnf安装

[root@blog ~]# dnf install grep

三,查看grep的版本和帮助

1,查看版本

[root@blog ~]# grep --version
grep (GNU grep) 3.1
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Written by Mike Haertel and others, see <http://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>.

2,查看帮助:

[root@blog ~]# grep --help

3,查看手册:

[root@blog ~]# man grep

四,grep命令的使用例子

1,列出所有的nginx进程

#-v:反向匹配,不显示包含指定字串的行

[root@blog ~]# ps auxfww | grep 'nginx: ' | grep -v grep
root 14470 0.0 0.0 71028 3340 ? Ss May17 0:00 nginx: master process /usr/local/openresty/nginx/sbin/nginx
nginx 14471 0.0 0.0 102764 7796 ? S May17 0:00 \_ nginx: worker process
nginx 14472 0.0 0.0 102436 6048 ? S May17 0:00 \_ nginx: worker process
nginx 14473 0.0 0.0 102436 6048 ? S May17 0:00 \_ nginx: worker process
nginx 14474 0.0 0.0 102436 6048 ? S May17 0:00 \_ nginx: worker process
nginx 14475 0.0 0.0 102436 5992 ? S May17 0:00 \_ nginx: worker process
nginx 14476 0.0 0.0 102436 6048 ? S May17 0:00 \_ nginx: worker process
nginx 14477 0.0 0.0 102436 6048 ? S May17 0:00 \_ nginx: worker process
nginx 14478 0.0 0.0 102436 6048 ? S May17 0:00 \_ nginx: worker process

2,列出所有登录成功/失败的记录

#-i: 忽略大小写

[root@blog log]# grep -i "accepted password" /var/log/secure

3,列出所有不是root登录的记录

[root@blog log]# last | grep -v root

4,输出文件名和行号

#-n: 输出匹配行在文件中的行号

[root@blog log]# grep -i -n "accepted password" *

说明:如果有多个文件匹配时,文件名也会显示出来

5,递归查询

# -R :递归查询目录下的子目录及文件

[root@blog nginxlogs]$ grep -R -i iphone * 

如果不加 R,默认遇到目录不会继续查询

6,得到匹配到的记录数量

#-c:显示总共有多少行被匹配到,而不显示被匹配到的内容

[root@blog nginxlogs]$ grep -i -c iphone i_ssl.access.log
14811

7,只显示被匹配到的字符串,而不是匹配到的行

#-o:只显示被模式匹配的字符串

[root@blog nginxlogs]$ grep -i -o iphone i_ssl.access.log

8,只匹配单词:

#-w:被匹配的文本只能是单词,不能是单词中的一部分

[root@blog nginxlogs]$ grep -i -w advertise i_ssl.access.log 

可以匹配:  /home/index?advertise=b&now_page_id=0&app_key=iPhone

不能匹配:  /advertisement/getList?uid=12345

9,多行显示:显示匹配到的行及其后指定数量的行

匹配accepted的行及其前10行

[root@blog log]# grep -B 10 -i "accepted" secure

匹配accepted的行及其后10行

[root@blog log]# grep -A 10 -i "accepted" secure

匹配accepted的行及其前后各10行

[root@blog log]# grep -C 10 -i "accepted" secure

10,只显示有匹配行的文件名:

#-l:列出文件内容符合指定的样式的文件名称

[root@blog log]# grep -i -R -l "accepted" * 

五,grep中使用正则表达式的例子

1,集合:

. :任意一个字符。

    [abc] :表示匹配一个字符,这个字符必须是abc中的一个。

    [a-zA-Z] :表示匹配一个字符,这个字符必须是a-z或A-Z这52个字母中的一个。

  [^123] :匹配一个字符,这个字符是除了1、2、3以外的所有字符

查询no和od中间是一个小写字母的账号

[root@blog log]# grep "no[a-z]od" /etc/passwd

2,开头和结尾:

查询以bash结尾的账号

[root@blog log]# grep 'bash$' /etc/passwd

查询所有以非bash结尾的账号

[root@blog log]# grep '[^bash]$' /etc/passwd 

查询以r打头的账号:

[root@blog log]# grep '^r' /etc/passwd 

查询所有不是r打头的账号

[root@blog log]# grep '^[^r]' /etc/passwd

3,出现次数

x\{m\} 重复字符x,m次,例子:'a\{5\}'匹配包含5个a的行。

x\{m,\} 重复字符x,至少m次,例子:'b\{5,\}'匹配至少有5个b的行。

x\{m,n\}重复字符x,至少m次,不多于n次,例子:'c\{5,10\}'匹配5--10个c的行

passwd 中o出现2次

[root@blog log]# grep "o\{2\}" /etc/passwd 

passwd 中o出现最少1次最多2次

[root@blog log]# grep "o\{1,2\}" /etc/passwd

passwd 中o出现最少2次最多不限次

[root@blog log]# grep "o\{2,\}" /etc/passwd

4,其他例子:

显示一个目录下的所有目录:

[root@blog log]# ll -d */

[root@blog log]#  ls -l |grep "^d" 

列出一个目录下所有非目录的文件

[root@blog log]#  ls -l |grep "^[^d]"

列出一个目录下,group和other有权读取的文件

[root@blog log]#  ls -l |grep "^-...r..r.." 

六,查看centos的版本

[root@blog ~]$ cat /etc/redhat-release
CentOS Linux release 8.0.1905 (Core)

linux(centos8):用grep命令查找文件内容的更多相关文章

  1. Linux中通过grep命令检索文件内容和指定内容前后几行

    原文链接: https://www.linuxidc.com/Linux/2017-11/148390.htm Linux系统中搜索.查找文件中的内容,一般最常用的是grep命令,另外还有egrep命 ...

  2. 利用grep命令查找文件内容

    例如查找PHP源码某个函数的具体实现 grep -rn "PHP_FUNCTION(socket_accept)" ./ext

  3. linux 下用find命令查找文件,rm命令删除文件

    linux 下用find命令查找文件,rm命令删除文件. 删除指定目录下指定文件find 要查找的目录名 -name .svn |xargs rm -rf 删除指定名称的文件或文件夹: find -t ...

  4. 24-Ubuntu-文件和目录命令-查找文件内容-grep

    grep Linux系统中grep命令是一种强大的文本搜索工具. grep允许文本文件进行模式查找,所谓模式查找,又被称为正则表达式. 选项 含义 -n 显示匹配行及行号 -v 显示不包括匹配文本的所 ...

  5. 使用grep命令查找文件中符合”.stg.“行

    某目录下有个test.txt,内容如下: www.stg.comwwstgcom 如果我这样去查找: $ grep '.stg.' test.txtwww.stg.comwwstgcom 发现第二个匹 ...

  6. linux系统使用grep命令提取文件的基名或者路径名

    效果等于~]#dirname /etc/sysconfig/network-scripts/ifcfg-ens33 echo "/etc/sysconfig/network-scripts/ ...

  7. Linux中利用grep命令如何检索文件内容详解

    前言 Linux系统中搜索.查找文件中的内容,一般最常用的是grep命令,另外还有egrep命令,同时vi命令也支持文件内容检索.下面来一起看看Linux利用grep命令检索文件内容的详细介绍. 方法 ...

  8. linux命令---查找文件中的内容

    linux命令---查找文件中的内容   [yang@localhost ~]$ cat 1.txt |egrep '123456789|second'-------匹配123456789或者seco ...

  9. linux grep 查找文件内容

    自试: wang@wang:~$ grep -i "*args*" ~/IGV01-SW/src/bzrobot_diagnostics/bzrobot_lightbelt_man ...

随机推荐

  1. 渣渣的Leetcode之旅(Python3)_1.两数之和

    题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标.你可以假设每种输入只会对应一个答案.但是,数组中同一个元素不能使用两遍 ...

  2. [LeetCode]196. 删除重复的电子邮箱(delete)

    题目 编写一个 SQL 查询,来删除 Person 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个. +----+------------------+ | Id | Email | ...

  3. [LeetCode] 22. 括号生成(回溯/DP)

    题目 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结果为: [ "((()))", "(()( ...

  4. python中的方向控制函数

    方向控制函数:控制海龟方向,包含绝对角度&海龟角度 改变海龟运行方向,让海龟转向 angle :改变行进方向,将海归运行方向改变为某一个绝对的角度 例如 将坐标系中的海龟方向改变为绝对系中的4 ...

  5. Hashmap,Set,Map,List,ArrayList的区别

    表格: 类型 默认容量 加载因子[1] 扩容增量 底层实现 是否安全及同步方式 Vector 10 1 2倍 Object数组 安全,synchronized ArrayList 10 1 1.5倍( ...

  6. O、Θ、Ω

    1.这些是时间复杂度的.(e.g. O(n).Θ(n).Ω(n)) 主要为主定理(坏东西) 2.本质 O <= Θ = Ω >=

  7. python一些小trick

    数据去重 lst = ['1','2','3','3'] lst = list(set(lst)) 不同根目录下引用另一个库 例如 |--a--a.py |--b--b.py 在b.py中调用库a.p ...

  8. C语言实现数据机构链表的基本操作(从键盘输入生成链表、读取数组生成链表)

    利用头插法实现逆置 下面简单介绍一下,算法思想结合图示看 算法思想:"删除"头结点与链表其他结点的原有联系(即将头结点的指针置空),再逐个插入逆置链表的表头(即"头插&q ...

  9. sqli-labs第二关 详解

    学会了第一关,时隔多天来到了第二关,怎么说了没有看wp就给做出来了. 首先,我是自己先判断了下,这个是什么注入 ?id=1' 不行 ?id=1' or '1'='1--+ 也不行 然后又尝试了下 ?i ...

  10. 2020.09.05【NOIP提高组&普及组】模拟赛C组1总结

    T1:机器翻译 这一道题是一个很简单的队列题目,我们只要每次维护队列元素数量保持在m以内即可 T2:乌龟棋 这一道题我一开始比赛是暴力枚举(万事先暴力),很明显这个肯定会超时(30分)那么考虑动态规划 ...