千家信息网

Linux中怎么使用grep

发表于:2025-01-16 作者:千家信息网编辑
千家信息网最后更新 2025年01月16日,本文小编为大家详细介绍"Linux中怎么使用grep",内容详细,步骤清晰,细节处理妥当,希望这篇"Linux中怎么使用grep"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧
千家信息网最后更新 2025年01月16日Linux中怎么使用grep

本文小编为大家详细介绍"Linux中怎么使用grep",内容详细,步骤清晰,细节处理妥当,希望这篇"Linux中怎么使用grep"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

Grep全称Global Regular Expression Print,表示全局正则表达式 是一个强大的文本搜索工具,采用正则匹配,与sed、awk并称Linux三剑客。

1、命令格式 grep [options] files

2、主要参数 -c: 只输出匹配行的数目 -i: 不区分大小写 -n:显示匹配航以及行号 -l:查询多文件的时候只输出包含匹配字符的文件名 -v:反向匹配,即显示不匹配的行 -h: 查询的时候不适用文件名 -s:不显示错误信息

3、部分正则表达式 \ 反义字符:如""""表示匹配"" ^$ 开始和结束 [] 单个字符,[A] [ – ] 匹配一个范围,[0-9a-zA-Z]匹配所有数字和字母

  • 前面的字符出现0次或者多次

  • 前面的字符出现了一次或者多次 . 任意字符

4、经典场景

除非要精确区分大小写,否则请加上-i来忽略大小写

(1)结合find命令和管道 你的一个音乐文件夹里有多种格式的文件,而你只想找到艺术家jay的mp3文件,并且不含有任何的混合音轨

 [root@localhost ~]#find . -name ".mp3" | grep -i jay | grep -vi "remix"

分析: 1)使用find -name 来列出所有mp3文件,重定向给grep

  1. 使用grep -i 来查找包含jay的行 3)使用grep -vi 来查找不包含remix的行

(2)-A -B -C 很多时候,我们并关心匹配行而是关心匹配行的上下文。这时候-A -B -C就有用了 -A n 后n行,A记忆为(After) -B n 前n行,B记忆为(Before) -C n 前n行,后n行,C记忆为(Center) 举例

 [root@localhost ~]# ifconfig | grep -A 2 "Link encap" eth0      Link encap:Ethernet  HWaddr 00:0C:29:F3:38:15             inet addr:192.168.91.129  Bcast:192.168.91.255  Mask:255.255.255.0           inet6 addr: fe80::20c:29ff:fef3:3815/64 Scope:Link -- lo        Link encap:Local Loopback             inet addr:127.0.0.1  Mask:255.0.0.0           inet6 addr: ::1/128 Scope:Host   [root@localhost ~]#  ifconfig | grep -C 2 "lo"           Interrupt:67 Base address:0x2024   lo        Link encap:Local Loopback             inet addr:127.0.0.1  Mask:255.0.0.0           inet6 addr: ::1/128 Scope:Host

(3) 用-c来统计数目 你手头有一个很大的文件,这个文件包含网址,比如www.baidu.com tieba.baidu.com等等。你想要知道有多少个隶属于百度的网址

 [root@localhost ~]# grep -c "*baidu.com*" filename 例子 [root@localhost ~]# cat file.txt wtmp begins Mon Feb 24 14:26:08 2014 192.168.0.1 162.12.0.123 "123" 123""123 njuhwc@163.com njuhwc@gmil.com 123 www.baidu.com tieba.baidu.com www.google.com www.baidu.com/search/index [root@localhost ~]# grep -cn ".*baidu.com.*" file.txt 3

(4) -r 递归查找子目录 查找当前目录极其子目录下面包含匹配字符的文件 查找子目录,匹配后输出行号,这里的点表示当前目录

 [root@localhost ~]# grep -nr HELLO_HWC_CSND_BLOG* .

例子:

 [root@localhost ~]# grep -nr baidu . ./file.txt:8:www.baidu.com ./file.txt:9:tieba.baidu.com ./file.txt:11:www.baidu.com/search/index ./test/test.txt:1:http://www.baidu.com

查找子目录,匹配后只输出文件名

 [root@localhost ~]# grep -lr HELLO_HWC_CSND_BLOG* .

例子:

 [root@localhost ~]# grep -lr baidu . ./file.txt ./test/test.txt

(5)–line-buffered 打开buffering 模式 你有一个文件是动态的,它不断地添加信息到文件的尾部,而你想要输出包含某些信息的行。即持续的grep一个动态的流

 [root@localhost ~]#tail -f file | grep --line-buffered your_pattern

(6)结合ps查找进程

 [root@localhost ~]# ps aux | grep init root         1  0.0  0.1   2072   632 ?        Ss   22:52   0:01 init [5]                             root      4210  0.0  0.1   6508   620 ?        Ss   23:01   0:00 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "/usr/bin/dbus-launch --exit-with-session /etc/X11/xinit/Xclients" root      4233  0.0  0.0   2780   504 ?        S    23:01   0:00 /usr/bin/dbus-launch --exit-with-session /etc/X11/xinit/Xclients root      4956  0.0  0.1   3920   680 pts/1    R+   23:27   0:00 grep init

这里我们看到了grep init我们执行的命令也被列出来了 如果不想要这一行,我们可以这么改命令

 [root@localhost ~]# ps aux | grep [i]nit root         1  0.0  0.1   2072   632 ?        Ss   22:52   0:01 init [5]                             root      4210  0.0  0.1   6508   620 ?        Ss   23:01   0:00 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "/usr/bin/dbus-launch --exit-with-session /etc/X11/xinit/Xclients" root      4233  0.0  0.0   2780   504 ?        S    23:01   0:00 /usr/bin/dbus-launch --exit-with-session /etc/X11/xinit/Xclients

(7)查找不包含某一个目录

 [root@localhost ~]#grep -R --exclude-dir=node_modules 'some pattern' /path/to/search

例子

 [root@localhost ~]# ls anaconda-ks.cfg  Desktop  file.txt  find.result  install.log  install.log.syslog  test [root@localhost ~]# grep -r baidu . ./file.txt:www.baidu.com ./file.txt:tieba.baidu.com ./file.txt:www.baidu.com/search/index ./test/test.txt:http://www.baidu.com

这时候如果我们不想包含test目录

 [root@localhost ~]# grep -R --exclude-dir=text "baidu" . ./file.txt:www.baidu.com ./file.txt:tieba.baidu.com ./file.txt:www.baidu.com/search/index

如果报错

 grep: unrecognized option `--exclude-dir=test'

说明版本过老,更新下就ok

(8)查找IP地址 这里用到了-o和-P命令 我们通过man grep查看 -o, –only-matching: Show only the part of a matching line that matches PATTERN. -P, –perl-regexp: Interpret PATTERN as a Perl regular expression. 也就是说-o,只显示匹配行中匹配正则表达式的那部分 -P,作为Perl正则匹配

 [root@localhost ~]# cat file.txt wtmp begins Mon Feb 24 14:26:08 2014 192.168.0.1 162.12.0.123 "123" 123""123 njuhwc@163.com njuhwc@gmil.com 123 www.baidu.com tieba.baidu.com www.google.com www.baidu.com/search/index [root@localhost ~]# grep -oP "([0-9]{1,3}\.){3}[0-9]{1,3}" file.txt 192.168.0.1 162.12.0.123

(9)查找邮箱

 [root@localhost ~]# grep -oP "[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+" file.txt

例子

 [root@localhost ~]# cat file.txt wtmp begins Mon Feb 24 14:26:08 2014 192.168.0.1 162.12.0.123 "123" 123""123 njuhwc@163.com njuhwc@gmil.com 123 www.baidu.com tieba.baidu.com www.google.com www.baidu.com/search/index [root@localhost ~]# grep -oP "[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+" file.txt njuhwc@163.com njuhwc@gmil.com

读到这里,这篇"Linux中怎么使用grep"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

文件 字符 例子 命令 正则 输出 子目 子目录 目录 信息 大小 文件名 文章 时候 表达式 记忆 内容 动态 数目 格式 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 腾讯云数据库mysql 手机说没连接服务器是怎么回事 武汉做软件开发多少钱一个月 网络安全日是什么日子 部队网络安全广播稿 升级15.0后连接服务器失败 IMF数据库技术技巧 微信小程序本地存储数据库 网络安全违规外联题目 数据库文本换行代码 数据库查询不到密码 服务器电脑怎么管理员权限 软件开发项目的税费 tcp通信服务器怎样处理数据 软件开发项目评标规则 服务器的安全日志在哪里 静安区互联网软件开发出厂价格 上海移动软件开发服务费 四川网络安全监察总队破案 国服英雄联盟游戏加速服务器代理 金狐qq ip数据库 政务信息公共服务软件开发 方舟有哪些mod不需要服务器 网络安全钥匙的密码是多少 r for循环添加数据库 tcp通信服务器怎样处理数据 ADM下载显示无法连接服务器 软件开发项目评标规则 神武新服务器失败 数据库的通信机制
0