linux中grep命令的使用

作者&投稿:逮炊 (若有异议请与网页底部的电邮联系)
~ linux中grep命令的使用
grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix的grep家族包括grep、egrep和fgrep。
grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。ps -ef | grep httpd :检查httpd进程是否存在
ps -aux |awk '$2~/32651/'过滤可以用ps -aux |awk '$2!~/32651/' grep 2567会显示出现2567这个字符串的所有行 ; | 这是一个管道,把输出的结果当作输入送给下一个命令。
awk和sed比grep强大多了,在讲unix的书上grep一般是略带提的,但awk和sed就会着重讲。
查找etc目录下含有字符串“wl0505”的文件:find /etc -name "*" |xargs grep "wl0505" ~/thefile
grep -rn wl0505 /etc/*
find / -name "*.*" | xargs grep "wl0505" /home/filename*.*是文件名和扩展名,是把结果重定向到后面路径的文件中去,不在终端上显示了。
"*" 表示匹配带*这个字符的行* 表示 找出带有*的文件 并打印行 find ./ -maxdepth 1 | grep "*"find ./ -maxdepth 1 | grep *这两个命令才是等价的 对于 grep来讲 他只接受正则表达式匹配 * ? 这些字符需要加转义符
linux下的find与grep命令的功能不同。find 命令用于从目录树中查找与搜索条件匹配的文件;grep 命令用于查找输入流中包含模板文本的行。find 命令常结合grep命令使用, 以对搜索结果做进一步的筛选
匹配目录/cpl下所有(递归查找)以'#'开头的文件:
OCS101:~/cpl # grep -r '^#' .
./fk.c:#include
./fk.c:#include
./flower2.c:#include
./flower2.c:#include
./recursive_flower.c:#include
./recursive_flower.c:#include
./recursive_flower.c:#include
./recursive_flower.c:#define m 8
./flower.c:#include
./flower.c:#include
./flower.c:#include
./flower.c:#define N 1e8
匹配目录/cpl下所有(递归查找)以'}'结尾的文件:
OCS101:~/cpl # grep -r '^}' .
./fk.c:}
./fk.c:}
./fk.c:}
./Narcissus.java:}
./flower2.c:}
./flower2.c:}
./flower2.c:}
./recursive_flower.c:}
./recursive_flower.c:}
./recursive_flower.c:}
./recursive_flower.c:}
./flower.c:}
./flower.c:}
./flower.c:}
./flower.c:}
./flower.c:}
表达符集
^
锚定行的开始 如:'^grep'匹配所有以grep开头的行。
$
锚定行的结束 如:'grep$'匹配所有以grep结尾的行。
.
匹配一个非换行符的字符如:'gr.p'匹配gr后接一个任意字符,然后是p。
*
匹配零个或多个先前字符 如:' *grep' (注意*前有空格)匹配所有零个或多个空格后紧跟grep的行,需要用egrep 或者grep带上 -E 选项。 .*一起用代表任意字符。
[]
匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
[^]
匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-F和H-Z的一个字母开头,紧跟rep的行。
(..)
标记匹配字符,如'(love)',love被标记为1。
锚定单词的开始,如:'
锚定单词的结束,如'grep'匹配包含以grep结尾的单词的行。
x{m}
重复字符x,m次,如:'o{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。[1]用于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 -2 pattern filename同时显示匹配行的上下2行。
-a, --text
等价于匹配text,用于(Binary file (standard input) matches)报错
-b,--byte-offset
打印匹配行前面打印该行所在的块号码。
-c,--count
只打印匹配的行数,不显示匹配的内容。
-f File,--file=File
从文件中提取模板。空文件中包含0个模板,所以什么都不匹配。
-h,--no-filename
当搜索多个文件时,不显示匹配文件名前缀。
-i,--ignore-case
忽略大小写差别。
-q,--quiet
取消显示,只返回退出状态。0则表示找到了匹配的行。
-l,--files-with-matches
打印匹配模板的文件清单。
-L,--files-without-match
打印不匹配模板的文件清单。
-n,--line-number
在匹配的行前面打印行号。
-s,--silent
不显示关于不存在或者无法读取文件的错误信息。
-v,--revert-match
反检索,只显示不匹配的行。
-w,--word-regexp
如果被和引用,就把表达式做为一个单词搜索。
-R, -r, --recursive
递归的读取目录下的所有文件,包括子目录。 比如grep -R 'pattern' test会在 test 及其子目录下的所有文件中,匹配 pattern。
-V,--version
显示软件版本信息。
实例
要用好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'就可以了。
注意
在某些机器上,要使用-E参数才能够进行逻辑匹配(详见下)
grep "a|b" (匹配包含字符样式为"a|b"的行)
grep -E "a|b" (匹配包含字符样式为"a"或"b"的行)
man grep里面关于-E参数的说明是
-E
Treats each pattern specified as an extended regular expression (ERE). A NULL value for the ERE matches every
line.
Note: The grep command with the -E flag is the same as the egrep command, except that error and usage messages
are different and the -s flag functions differently.
拓展命令
egrep 命令,搜索文件获得模式。
egrep 命令会在输入文件(缺省值为标准输入)中搜索与用 Pattern 参数指定的模式相匹配的行。这些模式是完整的正则表达式就像在 ed 命令中的那样(除了 (反斜杠)和 (双反斜杠))。下列规则也应用于 egrep 命令:
* 一个正则表达式后面带一个 + (加号)会匹配一个或多个的正则表达式。
* 一个正则表达式后面带一个 ? (问号)会匹配零个或一个该正则表达式。
* 由 | (竖线)或者换行符隔开的多个正则表达式会匹配与任何一个正则表达式所匹配的字符串。
* 一个正则表达式可以被包括在“()”(括弧)中进行分组。
换行符将不会被正则表达式匹配。
运算符的优先顺序是 [, ], *, ?, +, 合并, | 和换行符。
注意: egrep 命令与 grep 命令带 -E 标志是一样的,除了错误消息和使用消息不同以及 -s 标志的功能不同之外。
egrep 命令会显示包含该匹配行的文件,如果您指定了多于一个 File 参数的话。
对 shell 有特殊含义的字符($, *, [, |, ^, (, ), ) 出现在 Pattern 参数中时必须带双引号。如果 Pattern 参数不是简单字符串,通常必须用单引号将整个模式括起来。在表达式中比如 [a-z],减号表示通过当前整理序列。整理序列可以定义等价的类以供在字符范围中使用。它使用了快速确定性的算法,有时需要外部空间。[2]fgrep命令,为文件搜索文字字符串。
fgrep命令搜索 File 参数指定的输入文件(缺省为标准输入)中的匹配模式的行。fgrep命令特别搜索 Pattern 参数,它们是固定的字符串。如果在 File 参数中指定一个以上的文件fgrep命令将显示包含匹配行的文件。
fgrep命令于 grep 和 egrep 命令不同,因为它搜索字符串而不是搜索匹配表达式的模式。fgrep命令使用快速的压缩算法。$, *, [, |, (, ) 和 等字符串被fgrep命令按字面意思解释。这些字符并不解释为正则表达式,但它们在 grep 和 egrep 命令中解释为正则表达式。
因为这些字符对于 shell 有特定的含义,完整的字符串应该加上单引号(‘ ... ’)。
如果没有指定文件,fgrep命令假定标准输入。一般,找到的每行都复制到标准输出中去。如果不止一个输入文件,则在找到的每行前打印文件名。


linux查找目录下的所有文件中是否含有某个字符串
1、可以使用grep命令来查找当前目录下所有文件中包含的某个特定字符。2、示例:查找当前目录下所有带有set的文件 。说明:-r 是递归查找 -n 是显示行号 : 表示当前目录所有文件,也可以是某个文件名

Linux正则表达式
一.linux文本查找命令 在说linux正规表达式之前,还介绍下linux中查找文本文件常用的三个命令:1.grep : 最早的文本匹配程序,使用POSIX定义的基本正则表达式(BRE)来匹配文本。2.egrep : 扩展式grep,其使用扩展式正规表达式(ERE)来匹配文本。3.fgrep : 快速grep,这个版本匹配固定字符串而非正则...

linux grep查询结果再过滤
因为查找串包含在grep调用中。过滤grep本身方法有:-v:表示忽略grep本身。2、还有一个方法:即将要查找的串变为一个正则表达式。因为grep进程的条目显示处理命令优先于正则表达式([s]ome_string)。当grep命令运行时,grep进程自身的条目不匹配,就没有包括在输出中了。使用egrep一次查找多个串:...

请问在LINUX中,grep命令什么时候才需要加双引号的?
1、比如你要查找"b zip2"这样有一个空格内容时,要加上引号,否则它会表示查找b了。2、#表示有#内容的行,并没有特殊含义。而-v则表示不匹配。整体的含义则是打出aa.conf这个文件中不含#内容的行。3、是不一样的。yes$是一个正则表达式,$表示以什么结尾,表示是查找yes结尾的行。而yes*则...

Linux||正则表达式及grep命令
通过以下命令即可得到 如果想检索以Z为行尾的行,通过以下命令即可得到 如果想检索三个字符其中前面为K,后面为D中间字符,为任意字符,通过以下命令即可得到 参考资料 https:\/\/www.runoob.com\/linux\/linux-comm-grep.html https:\/\/www.bilibili.com\/video\/BV1Yy4y117SX?p=12 ...

在linux中有文件aa.txt,如何使用grep工具匹配出
在linux中有文件aa.txt,使用grep工具匹配出的步骤如下:1、在Linux中,可以使用grep工具来匹配文本文件中的字符串。如果要匹配文件aa.txt中的某个字符串,可以使用以下命令:grep"要匹配的字符串"aa.txt。2、其中,“要匹配的字符串”是要查找的字符串,可以是一个单词、短语或正则表达式。aa.txt是...

grep简析
Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展,支持更多的re元字符, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux使用GNU版本的grep。它功能更强,可以通过...

linux查找目录下的所有文件中是否含有某个字符串
grep -rn "要查找的字符串"-r 是递归查找 -n 是显示行号 : 表示当前目录所有文件,也可以是某个文件名。grep命令的常用格式为:grep [选项] ”模式“ [文件]。模式部分:1、直接输入要匹配的字符串,这个可以用fgrep(fast grep)代替来提高查找速度,比如我要匹配一下hello.c文件中...

linux查找文件中是否含有某个字符串
手动创建了一个文件 内容如下:查看是否含有fs字符串命令:cat 1|grep fs 返回含有fs的字符串行,说明该文件包含该字符串

linux下用ps -ef |grep ,结果哪个是进程号
root 13091 12287 0 07:20 pts\/1 00:00:00 grep oscard中的第二列【13091】是进程号。ps命令将某个进程显示出来,LINUX下最常用的也是非常强大的进程查看命令 grep命令是查找,全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。这是一种强大的文本搜索工具,它...

古浪县19820217259: Linux下Grep命令的详细使用方法? -
淳孙康氏: 在linux中grep命令是非常有用的,它和管道(|)配合使用,非常强大,用于搜索文本文件.如果想要在几个文本文件中查找一字符串,可以使用'grep'命令.'grep'在文本中搜索指定的字符串. 假设您正在'/usr/src/linux/Documentation'目...

古浪县19820217259: linux的grep查询命令 -
淳孙康氏: grep默认只能识别基本的正则表达式,如果需要高级的,需要这样:grep -E 'A.*B|B.*A' filename 可以找到符合要求的,或者使用awk:awk '/A/&&/B/' filename

古浪县19820217259: linux grep命令怎么用 -
淳孙康氏: grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来. Unix的grep家族包括grep、egrep和fgrep.egrep和...

古浪县19820217259: linux中的grep怎么用~? -
淳孙康氏: grep abc /Desktop/AA 功能就是在桌面AA文档中查找abc的文本 如果有则将包含有AA的行全部显示 AA这一文档必须为文本类型的,下面是参照, grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样...

古浪县19820217259: Linux中利用grep命令如何检索文件内容详解 -
淳孙康氏: 如果是用vi打开文件后,在命令行下输入“/关键字” 如果是在没有打开文件的前提就用"cat 文件名 | grep "关键字""

古浪县19820217259: Linux中进行字符串查找,使用( )grep( )命令. -
淳孙康氏: "*.*" | xargs grep "wl0505" >>/home/filename *.*是文件名和扩展名,>>是把结果重定向到后面路径的文件中去,不在终端上显示了. 回答者: ...

古浪县19820217259: grep的用法 -
淳孙康氏: grep是linux下用于搜索输出内容中所含内容的一个命令.1.例如我要搜索名为aaa.txt中的一串字符"bbb",可以用 cat aaa.txt|grep bbb2.我要搜索当前目录含有bb的文件,可以用 ls |grep bb

古浪县19820217259: linux 管道命令下 !grep的用法,比如,last !grep root(感叹号为数线)
淳孙康氏: 有什么问题?grep就是linux的正则表达式搜索看命令的一种.比如你所说的last | grep root,执行完毕后在在console中显示出来包含root关键字的结果来.具体grep的用法可以去man grep一下.好了,可以结题了

古浪县19820217259: linux查找并输出特定行和它的前一行且在后面再输出一个空白行的命令 -
淳孙康氏: linux grep命令1.作用 Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户.2.格式 grep ...

古浪县19820217259: linux grep 命令用法 怎么用啊,,举例个简单的例子来看看,格式写出来,,重要, -
淳孙康氏: grep -n 'test' /tmp/test.txt 最简单的例子,找出test.txt中含有test的行,并显示行号

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网