shell脚本编程中的grep命令

grep命令语法

grep命令使用一个选项、一个要匹配的模式和要搜索的文件,它的语法如下所示:

grep  [options]  PATTERN  [FILES]

如果没有提供文件名,则grep命令将搜索标准输入。

  1. options

    选项 含义
    -c   输出匹配行的数目,而不是输出匹配的行
    -E   启用扩展表达式
    -h   取消每个输出行的普通前缀,即匹配查询模式的文件名
    -i   忽略大小写
    -l   只列出包含匹配行的文件名,而不输出真正的匹配行
    -v   对匹配模式取反,即搜索不匹配行而不是匹配行
  2. PATTERN

    匹配模式采用正则表达式。正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

    给定一个正则表达式和另一个字符串,我们可以达到如下的目的:

    1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);

    2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。

    正则表达式的特点是:

    1. 灵活性、逻辑性和功能性非常的强;

    2. 可以迅速地用极简单的方式达到字符串的复杂控制。

    3. 对于刚接触的人来说,比较晦涩难懂。

    由于正则表达式主要应用对象是文本,因此它在各种文本编辑器场合都有应用。

    在正则表达式的使用过程中,一些字符是以特定方式处理的。grep命令支持且最常用的特殊字符如下表所示:

    字符              

    含义
    ^ 指向一行的开头
    $ 指向一行的结尾
    . 任意单个字符
    [ ] 方括号内包含一个字符范围,其中任何一个字符都可以被匹配,例如字符范围a~e,或在字符范围前面加上^符号表示使用反向字符范围,即不匹配指定范围的内的字符。

    如果想将上述字符用作普通字符,就需要在它们前面加上\字符。例如,如果想使用$字符,需要将它写为 \$ 。

    在方括号中还可以使用一些有用的特殊匹配模式。如下表所示:

    匹配模式 含义
    [:alnum:] 字母与数字字符
    [:alpha:] 字母
    [:ascii:] ASCII字符
    [:blank:] 空格或制表符
    [:cntrl:] ASCII控制字符
    [:digit:] 数字
    [:graph:] 非控制、非空格字符
    [:lower:] 小写字母
    [:print:] 可打印字符
    [:punct:] 标点符号字符
    [:space:] 空白字符,包括垂直制表字符
    [:upper:] 大写字母
    [:xdigit:] 十六进制数字

    另外,如果指定了用于扩展匹配的-E选项,那些用于控制匹配完成的其他字符可能会遵循正则表达式的规则,如下表所示:

    选项 含义
    ? 匹配是可选的,但最多匹配一次
    * 必须匹配0次或多次
    + 必须匹配1次或多次
    {n} 必须匹配n次
    {n, } 必须匹配n次或者n次以上
    {n,m} 匹配次数在n到m之间,包括n和m

    对于shell中的grep命令来说,需要在这些字符之前加上 \ 字符。

grep命令示例

  1. 第一个例子是查找以字母e结尾的行。

    <span style="font-size:12px;">grep e$ words.txt</span>
  2. 查找以字母a结尾的单词。
    <span style="font-size:12px;">grep a[[:blank:]] words2.txt</span>
  3. 查找以Th开头的由3个字母组成的单词。
    <span style="font-size:12px;">grep Th.[[:space:]] words2.txt</span>
时间: 2024-12-21 23:13:53

shell脚本编程中的grep命令的相关文章

在Bash shell脚本编程中,如何正确无误获取到“脚本选项参数”和“脚本参数”呢?

Linnux 中有些命令的功能非常强大,主要是因为它支持的命令选项比较多.如:[ip]命令可以配置IP地址.路由条目的配置管理操作非常完善,该命令就可以完成[ifconfig]和[route]命令实现的所有功能.函数是单独的功能模块,如果函数能够接收选项参数,那么该函数的功能就变得丰富,且灵活.脚本也是一样. 那么linux中命令的格式又是怎么样的呢? [[email protected] ~]# command   [optons parameter1 | parameter2]...  pa

shell脚本编程-使用结构化命令(if/else)(转)

11.1 使用if-then语句 格式如下 if语句会执行if行定义的那个命令,如果该命令的退出状态码是0,则then部分的语句就会执行,其他值,则不会 1 2 3 4 if command then commands fi 在要执行的命令结尾加个分号,就能在同一行使用then语句了,格式如下 1 2 3 if command; then commands fi 11.2 if-then-else语句 格式如下: 1 2 3 4 5 6 if command then commands else

Linux Shell脚本编程--cut命令

cut cut命令可以从一个文本文件或者文本流中提取文本列. cut语法 [[email protected] ~]# cut -d'分隔字符' -f fields <==用于有特定分隔字符 [[email protected] ~]# cut -c 字符区间 <==用于排列整齐的信息 选项与参数: -d :后面接分隔字符.与 -f 一起使用: -f :依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思: -c :以字符 (characters) 的单位取出固定字符区间:

shell脚本学习笔记之grep命令用法

***grep基本用法 grep [选项] [模式] [文件..] 选项 -c 只输出匹配行的数量 -i 搜索时忽略大小写 -h 查询多文件时不显示文件名 -l 只搜索匹配的文件名,而不列出具体的匹配行 -n 列出所有的匹配行,并显示行号 -s 不显示不存在或无匹配文本的错误信息 -v 显示不包含匹配文本的所有行 -w 匹配整词 -x 匹配整行 -r 递归搜索,不仅所属当前工作目录,而且搜索子目录 -q 禁止储存任何结果,以推迟状态表示所属是否成功 -b 打印匹配行距文件的头部的偏移量,以字节为

(转)Shell脚本编程--Uniq命令

uniq 原文:http://blog.csdn.net/xifeijian/article/details/9209627 uniq命令可以去除排序过的文件中的重复行,因此uniq经常和sort合用.也就是说,为了使uniq起作用,所有的重复行必须是相邻的. uniq语法 [[email protected] ~]# uniq [-icu] 选项与参数: -i :忽略大小写字符的不同: -c :进行计数 -u :只显示唯一的行 testfile的内容如下 cat testfile hello

Linux中的shell脚本编程——函数

概述: 本章节将总结while,for循环语句的特殊用法,在不同的场景当中,更能发挥其功能和价值.除此之外,还会介绍一种特殊的循环语句select语句,实现菜单的作用.最重要的是讲解shell脚本编程中函数的用法.这些内容都要熟练掌握. 一.循环语句的特殊用法: 1.while循环的特殊用法(遍历文件的每一行): □语法:while read line; do 循环体 done < /PATH/FROM/SOMEFILE □意义:依次读取/PATH/FROM/SOMEFILE文件中的每一行,且将

shell编程中的find命令

find命令的完整语法格式如下所示: find  [path]  [options]  [tests]  [actions] path path部分很容易理解:既可以使用绝对路径,如/bin,也可以使用相对路径,如 . .如果需要,也可以指定多个路径,如 find /var  /home. options find命令有许多选项可用,下表列出几个最常用的选项. 选项 含义 -depth        在查看目录本身之前先搜索目录的内容 -follow 跟随符号链接 -maxdepths N  

《Linux命令行与shell脚本编程大全》学习笔记(转)

第一部分:Linux命令行<Linux命令行与shell脚本编程大全> 第一章:初识Linux shell<Linux命令行与shell脚本编程大全> 第二章:走进shell<Linux命令行与shell脚本编程大全> 第三章:基本的bash shell命令<Linux命令行与shell脚本编程大全> 第四章:更多的bash shell命令<Linux命令行与shell脚本编程大全> 第五章:使用Linux环境变量<Linux命令行与she

shell脚本编程的选择分支结构

选择执行结构: if语句单分支结构:如果条件为真,则执行then后的命令,否则,不做任何操作: if CONDITION :then STATEMENT fi 或 if CONDITION ; then STATEMENT1 STATEMENT2 ... fi 注意:想要执行then后面的STATEMENTS,前提条件是CONDITION部分为真: if语句的双分支结构:如果条件为真,就执行then后面的命令:否则就执行else后面的命令: if CONDITION ; then STATEME