Linux指令--grep

grep 介绍

grep 是一种在 Unix 和类 Unix 操作系统中常用的文本搜索工具,它可以在文件或标准输入中查找指定的文本模式,并将匹配的行打印出来。grep 是 “global search regular expression and print” 的缩写。

grep基本语法

grep 的基本语法为:

grep [options] pattern [file...]

其中,pattern 是要搜索的模式,file 是要搜索的文件名(可以是多个文件,也可以使用通配符指定一组文件),而 options 则控制 grep 的行为。以下是 grep 常用的一些选项:

  • -A n:显示匹配行及其后面 n 行的内容。
  • -o :仅显示匹配到的字符串
  • -B n:显示匹配行及其前面 n 行的内容。
  • -C n:显示匹配行及其前后各 n 行的内容。
  • -c:只显示匹配的行数。
  • -i:忽略大小写。
  • -v:反转匹配,只输出不匹配的行。
  • -n:显示匹配行的行号。
  • -r:递归搜索目录中的文件。
  • -w:匹配整个单词,而不是字符串的一部分。

前三个 A、B、C 参数很容易理解,举个栗子,假设我们有一个文件,文件名是 test,内容是从 1 到 9,每个数字一行:

grep -A2 7 test
7
8
9

-A2 7 的效果就是找到 7 ,然后输出 7 后面两行。

同理,-B2 7-C2 7就是找到 7 ,然后分别输出 7 前面两行和前后两行:

grep -B2 7 test
5
6
7grep -C2 7 test
5
6
7
8
9

继续,假设我们有个名叫 test 的文件内容如下:

cat test
aaaa
bbbbbb
AAAaaa
BBBBASDABBDA

grep -c命令的作用就是输出匹配到的行数,比如我们想找包含aaa的有几行,一眼就能看出来有两行,第一行和第三行都包含:

grep -c aaa test
2

grep -e命令是实现多个匹配之间的关系,比如我们想找包含aaaa或者bbbb的,显然应该返回第一行和第二行:

grep -e aaaa -e bbbb test
aaaa
bbbbbb

grep -F相当于fgrep命令,就是将pattern视为固定字符串。比如搜索'aa*'不带-F和带上,区别如下:

grep 'aa*' test
aaaa
AAAaaa

➜ grep -F 'aa*' test

可以看到第二次就找不到了,因为搜索的是 aa*这个字符串,而不是正则表达式。

grep -f 文件名的使用方法是把后面这个文件里的内容当做pattern。比如我们有个文件,名字是 grep.txt,然后内容是aa*,使用方法如下:

grep -f grep.txt test
aaaa
AAAaaa

实际上等同于grep 'aa*' test

grep -i --ignore-case作用是忽略大小写。

grep -n显示匹配的行号,就是多显示了个行号,不用细说。

grep -o仅显示匹配到的字符串,还是用刚才的aa*距离,之前显示的都是匹配到的字符所在的整行,这个命令是只显示匹配到的字符:

➜ grep -o 'aa*' test
aaaa
aaa

grep -q不打印匹配结果。刚看到这个我疑惑了半天,让你搜索字符串,你不给我结果那有啥用?然后发现还有一条很多教程没说:如果有匹配的内容则立即返回状态值 0。所以一般用在shell脚本中,在 if 判断里面。

grep -s不显示错误信息,不解释。

grep -v显示不被匹配到的行,相当于[^]反向匹配,最常见的还是用在查找线程的命令里,有时候会打印grep线程,可以再加上这么一个去除自己:

ps -ef|grep Typora
  501 91616     1   0 五11上午 ??        13:39.32 /Applications/Typora.app/Contents/MacOS/Typora
  501 14814 93748   0  5:33下午 ttys002    0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn Typora

➜ ps -ef|grep Typora|grep -v grep
  501 91616     1   0 五11上午 ??        13:39.32 /Applications/Typora.app/Contents/MacOS/Typora

可以看到第二次就没有打印grep线程自身

grep -w匹配整个单词,只有完全符合pattern的单次才会匹配到:

grep aaa test
aaaa
AAAaaa

➜ grep -w aaa test

可以看到第二次结果为空,因为没有aaa这个单词。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用:-m是grep命令的一个选项,用于设置grep命令匹配行数的最大值。当使用-m选项时,grep命令会在匹配到指定行数的行后停止搜索。 Linuxgrep命令是一种强大的文本搜索工具,它可以使用正则表达式搜索文本,并将匹配的行打印出来。而-m选项允许用户指定最大匹配行数,当匹配到指定行数的行后,grep命令会停止搜索。这在大型文件或者需要限制搜索结果数量时非常有用。例如,使用grep -m 10 pattern file可以指定最多只打印出10行匹配结果。 所以,linuxgrep -m选项允许用户设置匹配行数的最大值,并在匹配到指定行数的行后停止搜索。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [grep -rni 与grep -nsr 的区别](https://blog.csdn.net/qq_33210042/article/details/119762299)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [linux grep -r 查询相关名字的文件以及ps指令](https://blog.csdn.net/qq_15821487/article/details/124737783)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值