Linux命令(1)- grep

1、grep

功能:查找文件里符合条件的字符串。

语法grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]

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

参数:

-a或--text   将二进制文件以text文件方式查找

-A<显示列数>或--after-context=<显示列数>   除了显示符合范本样式的那一列之外,并显示该列之后的内容。

-b或--byte-offset   在显示符合范本样式的那一列之前,标示出该列第一个字符的位编号。

-B<显示列数>或--before-context=<显示列数>   除了显示符合范本样式的那一列之外,并显示该列之前的内容。

-c或--count   计算符合范本样式的列数

--color=auto  找到关键字加上颜色。

-C<显示列数>或--context=<显示列数>或-<显示列数>   除了显示符合范本样式的那一列之外,并显示该列之前后的内容。

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

-e<范本样式>或--regexp=<范本样式>   指定字符串做为查找文件内容的范本样式。

-E或--extended-regexp   将范本样式为延伸的普通表示法来使用。

-f<范本文件>或--file=<范本文件>   指定范本文件,其内容含有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每列一个范本样式。

-F或--fixed-regexp   将范本样式视为固定字符串的列表。

-G或--basic-regexp   将范本样式视为普通的表示法来使用。

-h或--no-filename   在显示符合范本样式的那一列之前,不标示该列所属的文件名称。

-H或--with-filename   在显示符合范本样式的那一列之前,表示该列所属的文件名称。

-i或--ignore-case   忽略字符大小写的差别。

-l或--file-with-matches   列出文件内容符合指定的范本样式的文件名称。

-L或--files-without-match   列出文件内容不符合指定的范本样式的文件名称。

-n或--line-number   在显示符合范本样式的那一列之前,标示出该列的列数编号。

-q或--quiet或--silent   不显示任何信息。

-r或--recursive   此参数的效果和指定“-d recurse”参数相同。

-s或--no-messages   不显示错误信息。

-v或--revert-match   反转查找。

-V或--version   显示版本信息。

-w或--word-regexp   只显示全字符合的列。

-x或--line-regexp   只显示全列符合的列。

-y   此参数的效果和指定“-i”参数相同。

--help   在线帮助。

2、grep的使用:
grep -r :明确要求搜索子目录

grep -d skip:或忽略子目录

grep -i pattern files :不区分大小写地搜索。默认情况区分大小写,
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,
grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),
grep -C number pattern files :匹配的上下文分别显示[number]行,
grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,
grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。

grep和特殊符号的使用:

grep man * 会匹配 ‘Batman’、‘manic’、‘man’等,
grep \‘<man\‘ * 匹配‘manic’和‘man’,但不是‘Batman’,
grep \‘<man>\‘ 只匹配‘man’,而不是‘Batman’或‘manic’等其他的字符串。
\‘^\‘:指匹配的字符串在行首,
\‘$\‘:指匹配的字符串在行尾,

grep搜索字符串

grep string filename

^M 以M开头的行,^表示开始的意思
M$ 以M结尾的行,$表示结束的意思
^[0-9] 以数字开始的行,[]内可列举字母
^[124ab] 以1,2,4,a,或b开头的行
^b.503 句点表示任一字母
* 星号表示0个以上的字母(可以没有)
+ 加号表示1个以上的字母
. 斜线可以去掉特殊意义

eg:

cat passwd | grep ^b 列出大学部有申请帐号者名单
cat passwd | grep ^s 列出交换学生申请帐号者名单
cat passwd | grep \‘^b.503\‘ 列出电机系各年级...
grep \‘^.\‘ myfile.txt 列出所有以句点开头的行

3、grep正则表达式元字符集

^  锚定行的开始 如:\‘^grep\‘匹配所有以grep开头的行。

$  锚定行的结束 如:\‘grep$\‘匹配所有以grep结尾的行。匹配一个非换行符的字符 如:\‘gr.p\‘匹配gr后接一个任意字符,然后是p。

*  匹配零个或多个先前字符 如:\‘*grep\‘匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。

[]  匹配一个指定范围内的字符,如\‘[Gg]rep\‘匹配Grep和grep。

[^]  匹配一个不在指定范围内的字符,如:\‘[^A-FH-Z]rep\‘匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。

(..)  标记匹配字符,如\‘(love)\‘,love被标记为1。

<  锚定单词的开始,如:\‘

>  锚定单词的结束,如\‘grep>\‘匹配包含以grep结尾的单词的行。

x{m}  重复字符x,m次,如:\‘0{5}\‘匹配包含5个o的行。

x{m,}  重复字符x,至少m次,如:\‘o{5,}\‘匹配至少有5个o的行。

x{m,n}  重复字符x,至少m次,不多于n次,如:\‘o{5,10}\‘匹配5--10个o的行。

w  匹配文字和数字字符,也就是[A-Za-z0-9],如:\‘Gw*p\‘匹配以G后跟零个或多个文字或数字字符,然后是p。

W  w的反置形式,匹配一个或多个非单词字符,如点号句号等。

b  单词锁定符,如: \‘bgrepb\‘只匹配grep。

 用于egrep和 grep -E的元字符扩展集

+  匹配一个或多个先前的字符。如:\‘[a-z]+able\‘,匹配一个或多个小写字母后跟able的串,如loveable,enable,disable等。

?  匹配零个或多个先前的字符。如:\‘gr?p\‘匹配gr后跟一个或没有字符,然后是p的行。

a|b|c  匹配a或b或c。如:grep|sed匹配grep或sed

()  分组符号,如:love(able|rs)ov+匹配loveable或lovers,匹配一个或多个ov。

x{m},x{m,},x{m,n}  作用同x{m},x{m,},x{m,n}

POSIX字符类

为了在不同国家的字符编码中保持一至,POSIX(The Portable Operating System Interface)增加了特殊的字符类,如[:alnum:]  A-Za-z0-9的另一个写法。要把它们放到[]号内才能成为正则表达式,如[A- Za-z0-9]或[[:alnum:]]。在linux下的grep除fgrep外,都支持POSIX的字符类。

[:alnum:]  文字数字字符

[:alpha:]  文字字符

[:digit:]  数字字符

[:graph:]  非空字符(非空格、控制字符)

[:lower:]  小写字符

[:cntrl:]  控制字符

[:print:]  非空字符(包括空格)

[:punct:]  标点符号

[:space:]  所有空白字符(新行,空格,制表符)

[:upper:]  大写字符

[:xdigit:]  十六进制数字(0-9,a-f,A-F)

实例

要用好grep这个工具,其实就是要写好正则表达式,所以这里不对grep的所有功能进行实例讲解,只列几个例子,讲解一个正则表达式的写法。

$ ls -l | grep \‘^a\‘

通过管道过滤ls -l输出的内容,只显示以a开头的行。

$ grep \‘test\‘ d*

显示所有以d开头的文件中包含test的行。

$ grep \‘test\‘ aa bb cc

显示在aa,bb,cc文件中匹配test的行。

$ grep \‘[a-z]{5}\‘ aa

显示所有包含每个字符串至少有5个连续小写字符的字符串的行。

$ grep \‘w(es)t.*1\‘ aa

如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(1),找到就显示该行。如果用egrep或grep -E,就不用""号进行转义,直接写成\‘w(es)t.*1\‘就可以了。

时间: 2024-10-23 00:34:53

Linux命令(1)- grep的相关文章

linux 命令之grep

1  引言 Grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并 把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.Grep 家族包括Grep. eGrep 和fGrep.eGrep 和fGrep 的命令只跟Grep 有很小不同. eGrep 是Grep 的扩展,支持更多的re 元字符, fGrep 就是 fixed  Grep 或fast  Grep,它们

Linux命令之grep篇

Linux 命令之 grep 篇 一,参数解析及演示 1,-v grep -v xxx 表示不显示包含 xxx 的行或文件,-v 表示取反的意思 举例: ls --file-type | grep -v "\$" 表示不显示当前文件夹下所有子文件夹,因为 ls --file-type 将会在所有的子文件夹后面加上 \,而正则表达式 "\$" 表示以 \ 结尾 2,有待发现...

每天一个linux命令(51)--grep命令

linux系统中grep 命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.grep 全称是 global regular expression print,表示全局正则表达式版本,它的使用权限是所有用户. grep 的工作方式是这样的,它在一个或多个文件中搜索字符串模板,如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名.搜索的结果被送到标准输出,不影响源文件内容. grep 可用于 shell 脚本,因为 grep 通过返回一个状态值来说明搜索的状态

linux 命令——39 grep (转)

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户. grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板.如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名.搜索的结果被送到标准输出,不影响原文件内容. grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成

【Linux命令】grep命令

1.作用 Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户. 2.格式 grep [options] 3.主要参数 [options]主要参数: -c:只输出匹配行的计数.-I:不区分大 小写(只适用于单字符).-n:显示匹配行及行号.-v:显示不包含匹配文本的所有行.-o:只输出文件中匹配到的部分.-s:不显示不存

每天学点Linux命令之grep 和 wc命令 ---(6/25)

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户. wc 1.命令格式: wc [选项]文件... 2.命令功能: 统计指定文件中的字节数.字数.行数,并将统计结果显示输出.该命令统计指定文件中的字节数.字数.行数.如果没有给出文件名,则从标准输入读取.wc同时也给出所指定文件的总统计数. 3.命令参数: -c 统计

linux命令(11)--grep命令及正则表达式

grep命令:print lines matching a pattern [功能]使用grep命令查找文件内容中的匹配到的字符串显示之,也称为过滤器,当然支持正则表达式复合使用. [语法] grep [options][pattern] filename [常用选项] -i:表示忽略大小写显示之 -n:输出行号 -o:表示只显示被匹配到模式的本身 -v:表示显示反显,匹配的不显示,没匹配到的显示之 --color=auto:将匹配到的内容着色显示之 [实例1]默认着色显示 [实例2]-i选项不

Linux 命令之 grep

1:将/etc/passwd中有root字符的行显示出来 1 [[email protected] zkero]# grep -n 'root' /etc/passwd 2 1:root:x:0:0:root:/root:/bin/bash 3 11:operator:x:11:0:operator:/root:/sbin/nologin 2:指定文件(test1)中读取hello 无论大小写的行 1 [[email protected] zkero]# grep -in 'hello' tes

linux命令:grep浅谈

  grep命令简介: 此个命令根据模式,搜索文本,并将符合模式的文本行显示出来.包含匹配, 不是完全匹配.也就是说只要某一行有一部分匹配到就显示出来. *延伸阅读:模式(pattern)是指文本字符和正则表达式的元字符组合而成匹配条件 1.命令格式: grep [OPTIONS] PATTERN [FILE...] grep -i 'root' /etc/passwd 2.命令功能: 对文本进行搜索,将符合模式的文本行显示出来. 3.命令参数: -i 查找时忽略大小写 --color 模式中关

Linux命令:grep

grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来. 根据网上资源总结了一些grep的用法 格式grep [options] 主要参数[options]主要参数:-c:只输出匹配行的计数.-I:不区分大 小写(只适用于单字符).-h:查询多文件时不显示文件名.-l:查询多文件时只输出包含匹配字符的文件名.-n:显示匹配行及行号.-s:不显示不存在或无匹配文本的