首页 > 系统相关 >shell grep教程

shell grep教程

时间:2024-06-21 12:31:51浏览次数:25  
标签:bin 教程 shell grep -- echo sh bash

grep (global regular expression) 命令用于查找文件里符合条件的字符串或正则表达式。

grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。

1. 语法

grep [options] pattern [files]
或
grep [-abcEFGhHilLnqrsvVwxy][-A<显示行数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]
  • pattern - 表示要查找的字符串或正则表达式。
  • files - 表示要查找的文件名,可以同时查找多个文件,如果省略 files 参数,则默认从标准输入中读取数据。

2. 选项:

-a 或 --text :

不要忽略二进制的数据。

-A<显示行数> 或
--after-context=<显示行数>

除了显示符合范本样式的那一列之外,并显示该行之后几行的内容。

]# echo -e "A\nB\nC\nD\nE"|grep -A1 C

C

D

-b 或

--byte-offset :

在显示符合样式的那一行之前,标示出该行第一个字符的编号

]# echo -e "123\n456\n789"|grep -b 5

4:456

-B<显示行数> 或

--before-context=<显示行数>

除了显示符合样式的那一行之外,并显示该行之前的内容。

]# echo -e "A\nB\nC\nD\nE"|grep -B1 C

B

C

-c 或

--count :

计算共有多少个匹配结果

]# echo -e "A\nBB\nCB\nDCB\nE"|grep -c B

3

-C<显示行数> 或

--context=<显示行数>或

-<显示行数> :

除了显示符合样式的那一行之外,并显示该行之前后的内容。

echo -e "A\nB\nC\nD\nE\nF\nG"|grep -C2 C

A

B

C

D

E

-d <动作> 或
--directories=<动作>

当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。

-d recurse 递归到文件夹里的文件查询
-d skip 跳过文件夹
-d read 默认操作,报错

]# grep -d recurse bin *

1/1.sh:/bin/bash

2.sh:/bin/bash

]# grep -d skip bin *

2.sh:/bin/bash

]# grep -d read bin *

grep: 1: Is a directory

2.sh:/bin/bash

-e<范本样式> 或

--regexp=<范本样式>

支持正则表达式匹配,支持多个-e

echo -e "123\nabc\nABC"|grep -e '1' -e 'a'

123

abc

-E 或

--extended-regexp

支持用扩展正则来进行匹配
egrep’即‘grep -E

echo -e "123\nabc\nABC"|grep -E '[a-z]'

abc

-f<规则文件> 或

--file=<规则文件>

指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。

cat patfile

aaa

bbb

]# echo aaa bbb ccc ddd eee | grep -f patfile -o

aaa

bbb

-F 或

--fixed-regexp

不支持正则表达式,将模式按照字面意思匹配 和fgrep效果一样

]# echo -e "bbbcd\naa" | grep -F "aa"

aa

]# echo -e "bbaabcd\naa" | grep -F "[a-z]"

无结果

-G 或

--basic-regexp :

基本正则

]# echo -e "bbaabcd\naa" | grep -G "[a-z]"

bbaabcd

aa

-h 或

--no-filename :

在显示符合样式的那一行之前,不标示该行所属的文件名称。

]# grep -r bin *

1/1.sh:/bin/bash

2.sh:/bin/bash

]# grep -r bin * -h

/bin/bash

/bin/bash

-H 或

--with-filename :

在显示符合样式的那一行之前,表示该行所属的文件名称。

]# grep bin *.sh

/bin/bash

]# grep bin *.sh -H

2.sh:/bin/bash

-i 或

-ignore-case

忽略字符大小写的差别。

]# echo -e "abc\nABC"|grep 'a' -i

abc

ABC

-l 或

--file-with-matches :

只打印匹配的文件名。

]# grep "/bin" *.sh -l

2.sh

-L 或

--files-without-match

列出文件内容不符合指定的样式的文件名称

]# grep bins *.sh -L

2.sh

-n 或

--line-number

在显示符合样式的那一行之前,标示行号。

]# grep sh *.sh -n

1:/bin/bash

2:bash

3:sh

-o 或

--only-matching

只显示匹配PATTERN 部分。

可用于统计某个字符或字符串在文件中出现的次数

grep -o "bash" /etc/passwd|wc -l

8

#grep -o '.' /etc/passwd|sort|uniq -c|sort -nr
统计每个字符出现的次数

#grep -o '[^,. ]*' patfile|sort|uniq -c|sort -nr
统计每个单词出现的次数

-q 或

--quiet或

--silent

不显示任何信息,可以通过判断返回值来确定是否有匹配到结果

]# grep called patfile -q

]# echo $?

0

-r 或

--recursive :

递归查找子目录中的文件。
此参数的效果和指定"-d recurse"参数相同

]# grep -r bin *

1/1.sh:/bin/bash

2.sh:/bin/bash

-s 或

--no-messages

不显示错误信息。

]# grep bin *

grep: 1: Is a directory

2.sh:/bin/bash

]# grep bin * -s

2.sh:/bin/bash

-v 或

--invert-match

反向查找,只打印不匹配的行

]# echo -e "1234\n345\n567"|grep -v 345

1234

567

-V 或

--version

显示版本信息。

]# grep -V

grep (GNU grep) 2.20

-w 或

--word-regexp

只显示全字符合的列。

]# echo -e "1234\n234\n567"|grep -w 234

234

-x 或

--line-regexp :

只显示全列符合的列。

]# echo -e "1234\n234 33\n567"|grep -x 234

无结果

]# echo -e "1234\n234 33\n567"|grep -x "234 33"

234 33

-y

忽略大小写,同-i

]# echo -e 'Ab\nab'|grep -y a

Ab

ab

3. 实例

1、在文件 file.txt 中查找字符串 "hello",并打印匹配的行:

grep hello file.txt

2、在文件夹 dir 中递归查找所有文件中匹配正则表达式 "pattern" 的行,并打印匹配行所在的文件名和行号:

grep -r -n pattern dir/

3、在标准输入中查找字符串 "world",并只打印匹配的行数:

echo "hello world" | grep -c world

4、在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行。此时,可以使用如下命令:

grep test *file

5、以递归的方式查找符合条件的文件。例如,查找指定目录/etc/acpi 及其子目录(如果存在子目录的话)下所有文件中包含字符串"update"的文件,并打印出该字符串所在行的内容,使用的命令为:

grep -r update /etc/acpi

6、反向查找。前面各个例子是查找并打印出符合条件的行,通过"-v"参数可以打印出不符合条件行的内容。

查找文件名中包含 test 的文件中不包含test 的行,此时,使用的命令为:

grep -v test *test*

7.统计test.txt文件中出现的字符以及字符串出现的次数,并排序

#grep -o '.' test.txt|sort|uniq -c|sort -nr
统计每个字符出现的次数

#grep -o '[^,. ]*' test.txt|sort|uniq -c|sort -nr
统计每个单词出现的次数

标签:bin,教程,shell,grep,--,echo,sh,bash
From: https://blog.csdn.net/cumtglad/article/details/139844595

相关文章

  • 2024最新超强AI绘画Stable Diffusion整合包安装教程,零基础入门必备!
    大家好,我是设计师阿威2024年绘画圈最火的软件,那妥妥的就StableDiffutionV4升级版无需安装,直接解压就能用(在此要感谢秋葉aaaki大佬的分享!)比之前版本的更加智能、高效和易操作。V4加强版小白也能轻易上手!「无套路!文末提供下载方式」1.软件背景信息▍StableDiffusi......
  • 怎么使用云桌面(云电脑)?ToDesk新手入门教程
    在当今数字化时代,个人用户对于电脑性能的需求日益提升,而云电脑(又可称为云桌面)作为一种新型的电脑配备模式,正在逐渐进入人们的视野。对于很多新手来说,可能是第一次接触到云电脑软件,今天小社长就以ToDesk云电脑为例子,为大家详细解析如何从零开始,轻松上手云电脑。【必备工具和设备......
  • 植物大战僵尸杂交版V2.1已更新!附安装教程(含安装包)
    软件介绍植物大战僵尸杂交版游戏中独特的杂交植物更是为游戏增添了不少亮点。这些杂交植物不仅外观独特,而且拥有更强大的能力,能够帮助玩家更好地应对游戏中的挑战。玩家可以通过一定的条件和方式,解锁并培养这些杂交植物,从而不断提升自己的战斗力。合理搭配植物,制定出最有效的......
  • Android Studio2024安装教程(含安装包)
    软件介绍AndroidStudio是谷歌推出的一个Android集成开发工具,基于IntelliJIDEA.类似EclipseADT,AndroidStudio提供了集成的Android开发工具用于开发和调试。下载链接:https://r0vr8xquwul.feishu.cn/docx/Xtg5dNQyzohIn6xSsbEcuSLLn0g图文教程:https://www.yuque.com......
  • XMind 2024 v24安装教程(含安装包)
    软件介绍XMind是一款非常实用的思维导图软件,应用全球最先进的EclipseRCP软件架构,全力打造易用、高效的可视化思维软件,强调软件的可扩展、跨平台、稳定性和性能,致力于使用先进的软件技术帮助用户真正意义上提高生产率。下载链接:https://docs.qq.com/doc/DRGJjS3Vkd0VHdHFZ......
  • 【黑客工具】漏洞扫描之Nessus使用教程(超详细)_nessus扫描
    Nessus简介Nessus是十分强大的漏洞扫描器,内含最新的漏洞数据库,检测速度快,准确性高。下载地址:DownloadTenableNessus|Tenable®1.点击"ConnentviaSSL"2.选择"NessusEssentials"版本3.填写注册信息,然后点击"Email",nessus会给你发送一封邮件,包含code。4.填写c......
  • linux上安装MySQL的详细教程
    一、检查是否安装过mysql   rpm-qa|grepmysql(ps:输入命令没内容就是没有安装)二、安装mysql包yum-yinstallmysql57-community-release-el7-10.noarch.rpm出现下边这个就表示成功了三、安装mysql1.首先要进行的工作就是:(该命令作用就是导入MySQL官方的......
  • 4月份最新出品:上海交大动手学大模型教程,快速入门LLM大模型(附课件)
    前有李沐大神的动手学深度学习现有上海交大的动手学大模型教程,对大模型感兴趣的直接冲!就在4月份上交大发布了动手学大模型教程,这份教程来自上海交大《人工智能安全技术》课程讲义拓展,教师是是张倬胜教授。朋友们如果有需要全套《上海交大的动手学大模型教程》,......
  • 计算机毕业设计项目推荐,33709基于协同过滤的旅游推荐系统的设计与实现(开题答辩+程序定
    摘 要本论文主要论述了如何使用python语言、Django框架开发一个旅游推荐系统,本系统将严格按照软件开发流程,进行各个阶段的工作,面向对象编程思想进行项目开发。在引言中,作者将论述该系统的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统进行各个阶段分析......
  • Windows的Gitlab Runner搭配的PowerShell脚本:自动下载Directory.Build.props相关文件
    简介GitlabRunner在Windows上运行之后,我们在.gitlab-ci.yml中编写script语句,思路和Linux是一样。但是考虑到Windows的特点,为了让程序员少接触一些知识点,以及给未来执行作业的时候预留更多的操作空间。简单说就是未来修改执行作业时候的逻辑,但是每个软件仓库根目录下的.gitlab-ci......