文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Linux中怎么使用grep

2023-06-28 14:49

关注

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

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

Linux中怎么使用grep

1、命令格式 grep [options] files

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

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

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”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-人工智能
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯