GREP与正则表达式

GREP工具详解
GREP工具
● Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则 表达式搜索文本,并把匹配的行打印出来。grep全称是Global Regular Expression Print,即全局正则表达式打印,它的使用权 限是所有用户。
● grep的工作方式:在一个或多个文件中搜索字符串模式。如果模式 中包括空格,也必须被引用,模式后的所有字符串被看作文件名。 搜索的结果被送到标准输出,不影响原文件内容。
● grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索 的结果,如果模式搜索成功,则返回0,如果搜索不成功,则返回1, 如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行 一些自动化的文本处理工作。

命令格式:
●grep [option] pattern file
grep 参数 模式 文件
● 主要选项[option]:
●-c:只输出匹配行的计数。
●-i:不区分大小写(只适用于单字符)。
●-l:查询多文件时只输出包含匹配字符的文件名。
●-n:显示匹配行及行号。
●-s:不显示不存在或无匹配文本的错误信息。
●-v:显示不包含匹配文本的所有行。

命令功能:
●用于过滤/搜索的特定字符。可使用正则表达式能多种命令配合使用,使用 上十分灵活。

pattern正则表达式主要参数[即,元字符]:
●\: 忽略正则表达式中特殊字符(元字符)的特殊含义。
●^:匹配正则表达式的以“某字符串开始的行”;
如果放在“[ ]”内,表示排除。
●$: 匹配正则表达式的以“某字符串结束的行”。
●<:从匹配正则表达式的行开始。
●>:到匹配正则表达式的行结束。
●[ ]:单个字符,如[A]即A符合要求 。
●[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
●.:所有的单个字符,匹配任一字符。
●*:匹配“*”前面的字符,匹配0个或无数个。

字符类描述
● [:alnum:] 字母数字集 “a-z A-Z 0-9”
● [:alpha:] 字母集合 “a-z A-Z”
● [:blank:] 空格或制表键
● [:cntrl:] 任何控制字符
● [:digit:] 数字集合 “0-9”
● [:graph:] 任何可视字符(无空格)
● [:lower:] 小写字母 “a-z”
● [:print:] 非控制字符
● [:punct:] 标点字符
● [:space:] 空格
● [:upper:] 大写字母 “A-Z”
● [:xdigit:] 十六进制数字 “0-9 a-f A-F”

GREP工具
● 搜索有root的行,并输出行号
# grep -n ‘root’ /etc/passwd
● 搜索没有root的行,并输出行号
# grep -nv ‘root’ /etc/passwd
● 利用[]搜索集合字符:[] 表示其中的某一个字符 ,例如[ade] 表示a或d 或e
# grep -n ‘r[oa]t’ /etc/passwd
● 用^符号做[]内的前缀,表示除[]内的字符之外的字符。比如搜索oo 前没有r的字符串所在的行. 使用 ‘[^r]oo’ 作搜索字符串
# grep -n ‘[^r]oo’ /etc/passwd
● 搜索只有一个字符的行,且为字母或数字
# grep “1KaTeX parse error: Expected 'EOF', got '#' at position 119: …合^来排除字符。 #̲ grep -n '[0-9]…. ^ 表示行的开头,KaTeX parse error: Expected group after '^' at position 22: …( 不是字 符,是位置)那么‘^̲’ 就表示空行,因为只有行首和行尾:比如搜 索root在开头的行
# grep ‘^root’ /etc/passwd
● 搜索以小写字母开头的行
# grep -n ‘2’ /etc/passwd
● 搜索开头不是英文字母的行
# grep -n ‘[a-zA-Z]’ /etc/passwd
KaTeX parse error: Can't use function '\.' in math mode at position 19: …前面的串是在行的结尾,比如 '\̲.̲' 表示 .在一行的结尾:搜索…’ /etc/passwd
● 搜索非空行
# grep -vn ‘^$’ /etc/passwd
任意一个字符. 与重复字符 *
在bash中*代表通配符,用来代表任意个字符,但是在正则表达式中,他含 义不同,表示有0个或多个 某个字符。
例如 oo
, 表示第一个o一定存在,第二个o可以有一个或多个,也可以没有, 因此代表至少一个o.
点. 代表一个任意字符,必须存在。 g??d 可以用 ‘g…d’ 表示。 good ,gxxd ,gabd …都符合。

grep -n ‘r…t’ /etc/passwd

搜索两个o以上的字符串(前两个o一定存在,第三个o可没有,也可有多个)
grep -n ‘ooo*’ /etc/passwd

搜索g开头和结尾,中间是至少一个o的字符串,即gog, goog…gooog… 等

grep -n ‘goo*g’ /etc/passwd

搜索g开头和结尾的字符串
# grep -n ‘g.*g’ /etc/passwd // .*表示 0个或多个任意字符
限定连续重复字符的范围 { } ; . * 只能限制0个或多个, 如果要确切的限制 字符重复数量,就用{范围} 。范围是数字用,隔开 2,5 表示2~5个, 2表示2个, 2, 表示2到更多个;
注意,由于{ }在SHELL中有特殊意义,因此作为正则表达式用的时候要用\ 转义一下。

正则表达式
什么是正则表达式?
正则表达式是一种可以用于模式匹配和替换的工具 。
怎样表达匹配?
元字符:一些特殊或不特殊字符的集合,这些字符被称为元字符 。
在这里插入图片描述

正则表达式的实例应用

  1. 使用句点匹配单字符
    假定正在过滤一个文本文件,对于一个有10个字符的脚本集,要求 前4个字符之后为XC,匹配操作如下:
    ….XC….
    以上例子解释为前4个字符任意,5、6字符为XC,后4个字符也任 意,下列哪些匹配?
    TEXTVITEST
    ABC4XCDCBA
    PPPPXXAAAA
    WEWEXCQUT

  2. 在行首以^匹配字符串
    使用ls –l命令,并匹配目录
    ^d 下列哪些匹配?
    ●drwx------
    ●-rwxrwxr–
    ●drwx–x--x
    ●lrwxrwxrwx

  3. 在行尾以 匹 配 字 符 串 , 匹配字符串, 符号放在匹配单词后
    下列表示什么意思?
    linux$ 以linux结尾
    ^$ 空行
    ^.$ 一个字符

  4. 使用匹配字符串中的单字符或其重复多次表达
    匹配compu
    ter的字符串如下:
    compter
    computer
    compuuter
    compuuuter

  5. 使用\屏蔽一些特殊字符的含义
    $ . ‘ “ * [ ] ^ | ( ) \ + ?

  6. 使用[ ]匹配一个范围或集合,使用“-”表示一个字符串范围
    例:(1)假定要匹配任意一个数字
    [0-9]
    例:(2)匹配任意字母
    [A-Za-z]

当^使用在方括号里,意思是否定或不匹配括号的内容。
练习:
匹配任意非字母型字符

grep ‘[3]’ /etc/passwd

使用{}模式匹配结果出现的次数
某字符{n} 匹配模式出现的n次
某字符{n,} 匹配模式出现最少为n次
某字符{n,m} 匹配模式出现次数在n和m之间
练习:
A{2}B
A{4,}B
A{2,4}B
[0-9]{4}xx[0-9]{4}


  1. [:alnum:] ↩︎

  2. a-z ↩︎

  3. :alpha: ↩︎

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值