`
yuanlanjun
  • 浏览: 1216438 次
文章分类
社区版块
存档分类
最新评论

shell脚本系列-grep用法总结

 
阅读更多

相信grepUNIXLINUX中使用最广泛的命令之一。grep(全局正则表达式版本)允许对文本文件进行模式查找。如果找到匹配模式,grep打印包含模式的所有行。grep支持基本正则表达式,也支持其扩展集。

本文主要讨论以下内容:

• grep(参数)选项。
• 匹配grep的一般模式。
• 只匹配字母或数字,或两者混用。
• 匹配字符串范围。

1. grep

grep 一般格式为:
grep [选项]基本正则表达式[文件]

2.双引号的使用

在grep命令中输入字符串参数时,最好将其用双引号括起来。例如:“mystring”。这样做有两个原因,一是以防被误解为shell命令,二是可以用来查找多个单词组成的字符串,例如:“jetplane”,如果不用双引号将其括起来,那么单词plane将被误认为是一个文件,查询结果
将返回“文件不存在”的错误信息。在调用变量时,也应该使用双引号,诸如:grep“$MYVAR”文件名,如果不这样,将没有返回结果。
在调用模式匹配时,应使用单引号。

3.grep选项
常用的grep选项有:

-c 只输出匹配行的计数。
-i不区分大小写(只适用于单字符)。
-h 查询多文件时不显示文件名。
-l 查询多文件时只输出包含匹配字符的文件名。
-n 显示匹配行及行号。
-s 不显示不存在或无匹配文本的错误信息。
-v 显示不包含匹配文本的所有行。

4. grep举例

4.1 多文件查找

$ grep "sort"*.doc
或在所有文件中查询单词“ sort it”
$ grep "sort it" *

$ grep -c "48"data.f
$ 4
grep返回数字4,意义是有4行包含字符串“48”

显示满足匹配模式的所有行行数

[root@localhost /]# grep -n "48" data.f
1:48 Dec 3BC1997 LPSX 68.00 LVX2A 138
2:483 Sept 5AP1996 USP 65.00 LVX2C 189
5:484 nov 7PL1996 CAD 49.00 PLV2C 234
6:483 may 5PA1998 USP 37.00 KVM9D 644

显示不匹配的行

[root@localhost /]# grep -v "48" data.f
47 Oct 3ZL1998 LPSX 43.00 KVM9D 512
219 dec 2CC1999 CAD 23.00 PLV2C 68
216 sept 3ZL1998 USP 86.00 KVM9E 234

大小写敏感

[root@localhost /]# grep -i "sept" data.f
483 Sept 5AP1996 USP 65.00 LVX2C 189
216 sept 3ZL1998 USP 86.00 KVM9E 234

5.正则表达式

5.1 模式匹配

假定要抽取代码为484和483的城市位置,上一章中讲到可以使用[ ]来指定字符串范围,这里用48开始,以3或4结尾,这样抽出484或483。

[root@localhost /]# grep "48[34]" data.f
483 Sept 5AP1996 USP 65.00 LVX2C 189
484 nov 7PL1996 CAD 49.00 PLV2C 234
483 may 5PA1998 USP 37.00 KVM9D 644

不匹配行首 如果要抽出记录,使其行首不是48,可以在方括号中使用^记号,表明查询在行首开始。

[root@localhost /]# grep '^[^48]' data.f
219 dec 2CC1999 CAD 23.00 PLV2C 68
216 sept 3ZL1998 USP 86.00 KVM9E 234

匹配任意字符

如果抽取以K开头,以D结尾的所有代码,可使用下述方法,因为已知代码长度为5个字符:

[root@localhost /]# grep 'K...D' data.f
47 Oct 3ZL1998 LPSX 43.00 KVM9D 512
483 may 5PA1998 USP 37.00 KVM9D 644

日期查询

一个常用的查询模式是日期查询。先查询所有以5开始以1996或1998结尾的所有记录。使用模式5..199[6,8]。这意味着第一个字符为5,后跟两个点,接着是199,剩余两个数字是6或8。

[root@localhost /]# grep '5..199[68]' data.f
483 Sept 5AP1996 USP 65.00 LVX2C 189
483 may 5PA1998 USP 37.00 KVM9D 644

模式出现机率

抽取包含数字4至少重复出现两次的所有行,方法如下:

[root@localhost /]# grep '4/{2/}' data.f
483 may 5PA1998 USP 37.00 KVM9D 644

使用grep匹配“与”或者“或”模式

[root@localhost /]# grep -E '216|219' data.f
219 dec 2CC1999 CAD 23.00 PLV2C 68
216 sept 3ZL1998 USP 86.00 KVM9E 234

使用grep匹配“与”或者“或”模式

[root@localhost /]# grep -E '216|219' data.f
219 dec 2CC1999 CAD 23.00 PLV2C 68
216 sept 3ZL1998 USP 86.00 KVM9E 234

6 类名

类等价的正则表达式类等价的正则表达式
[[:upper:]][A-Z]
[[:lower:]] [a-z]
[[:alnum:]][0-9a-zA-Z]
[[:space:]]空格或tab键
[[:digit:]][0-9]
[[:alpha:]][a-zA-Z]

7 总结

希望大家已经理解了grep的灵活性,它是一个很强大而流行的工具,像其他许多UNIX工具一样,已经被使用在DOS中。如果要通过文件快速查找字符串或模式, grep是一个很好的选择。简单地说, grep是shell编程中很重要的工具。

分享到:
评论

相关推荐

    linux-shell脚本命令:grep命令简介

    接下来,我们详细介绍grep命令的用法及其背后的知识点。 ### grep命令用法 grep命令的基本格式为: ```bash grep [选项] '搜索模式' 文件名 ``` 常用选项包括: - `-c`:仅显示包含模式的行的数量。 - `-i`:忽略大...

    第二十四章:shell脚本-正则、grep、sed、awk三剑客1

    ### 第二十四章:Shell 脚本 - 正则、grep、sed、awk 三剑客 #### 一、正则表达式及 grep **1. 概述** 正则表达式是一种强大的文本处理工具,它能够帮助用户方便地进行字符串的搜索、替换等操作。在 Linux 系统中...

    Linux-shell脚本全面学习.pdf

    Linux Shell 脚本编程基础知识点总结 Linux 脚本编写基础 1.1 语法基本介绍 * `#!` 符号用来告诉系统它后面的参数是用来执行该文件的程序 * 在 Linux 中,使用 `/bin/sh` 来执行程序 * 编辑好脚本后,需要使其可...

    Shell脚本-珍藏版

    Shell脚本是一种命令行解释器脚本,它通过组合一系列命令来自动化执行一系列任务,是Linux和Unix系统管理员不可或缺的工具。本珍藏版Shell脚本教程旨在为初学者提供基础知识的系统学习,包括脚本的编写、字符串处理...

    UNIX命令及SHELL编程

    16_基础shell编程-shell脚本介绍.PDF 17_基础shell编程-条件测试.PDF 18_基础shell编程-控制流结构.PDF 19_基础shell编程-shell 函数.PDF 20_基础shell编程-向脚本传递参数.PDF 21_基础shell编程-创建屏幕输出...

    swift-ShellKit用于运行shell脚本的Objective-C框架

    Swift-ShellKit是一个Objective-C框架,专为在Swift项目中执行shell脚本提供便利。它在iOS、macOS、tvOS和watchOS等Apple平台上,为开发者提供了与操作系统底层交互的强大工具。通过ShellKit,你可以轻松地在Swift...

    Shell 脚本专家指南

    Shell脚本是Linux/Unix操作系统中非常强大的工具,它允许用户编写一系列命令并自动执行它们,这些命令通常以bash(Bourne Again SHell)或其他类型的shell(如sh、csh、ksh等)编写而成。Shell脚本广泛用于系统管理...

    LINUX SHELL 脚本攻略

    本书的第3版很可能会包含最新的Shell脚本编程技术和实践,例如使用高级文本处理工具(如grep、sed、awk)来分析和处理数据、利用正则表达式来匹配和处理字符串、以及编写并发执行的脚本以提升性能等。 除此之外,...

    shell脚本实现服务器进程监控的方法

    本文将深入探讨如何使用Shell脚本实现服务器进程监控,这不仅有助于及时发现异常情况,还能提高系统的可用性和稳定性。接下来,我们将根据提供的文件信息详细解释其原理、步骤以及实际应用。 #### 一、写作背景 在...

    shell脚本的demo

    本示例“shell脚本的demo”提供了一个基础的教程,旨在帮助初学者理解并掌握Shell脚本的基本语法和用法。下面将详细阐述相关知识点。 1. **Shell脚本简介**: Shell脚本是一种文本文件,包含了一系列命令,当执行...

    shell脚本指南

    Linux shell脚本指南通常会为初学者提供一系列基础概念和使用方法,帮助读者快速入门Linux shell脚本编程。它会包含以下知识点: 1. shell脚本基础:包括什么是shell脚本,如何编写一个简单的shell脚本,以及shell...

    linux经典shell脚本

    ### Linux经典Shell脚本知识点详解 #### 一、使用awk去除C语言注释 在Linux环境中,使用awk脚本来处理文本或代码是非常常见的做法。在本案例中,我们看到一个awk脚本,其目的是用于去除C语言源代码中的注释。 **...

    100个shell脚本【持续更新】.pdf

    3. 字符串处理:在Shell脚本中,可以使用echo命令打印字符串,使用grep、awk等命令对字符串进行处理。例如,使用awk的-F选项来设置字段分隔符,使用print来输出特定字段。 4. 变量的读取和设置:Shell脚本中可以...

    三阶段shell课件.pdf

    根据提供的文件内容,我们可以提取以下关于Shell脚本的重要...以上知识点详细阐述了Shell的基本概念、编写Shell脚本的方法、脚本执行方式、变量的使用与分类等重要信息,是学习和掌握Shell脚本编写不可或缺的知识点。

    shell 脚本

    观看这样的视频教程可以帮助你通过实例学习Shell脚本的使用方法和技巧。 总的来说,掌握Shell脚本不仅可以提升你在Linux环境下的工作效率,也是成为一名合格的系统管理员或开发者所必需的技能。通过不断练习和学习...

    01-SHELL编程前奏-小工具

    通过学习这些工具的使用方法,我们可以在日常工作中更加高效地处理文本数据。无论是查找特定的文本、提取文件中的某一行或多行,还是对文件中的数据进行排序,这些工具都能帮助我们轻松完成任务。掌握了这些基础命令...

    脚本shell写的,一些工作脚本集合

    在IT行业中,Shell脚本是一种极其重要的工具,尤其在Linux和Unix系统中广泛使用。它是一种解释型的编程语言,允许用户通过命令行接口执行一系列命令,自动化日常任务,提高工作效率。标题“脚本shell写的,一些工作...

    Shell脚本编程入门100例

    Shell脚本是Linux操作系统中的一种强大的自动化工具,它允许用户通过编写一系列命令来执行复杂的任务。这本"Shell脚本编程入门100例"教程针对初学者,提供了丰富的实例,旨在帮助读者快速掌握Shell脚本的基本概念和...

Global site tag (gtag.js) - Google Analytics