转载:http://blog.csdn.net/universsky/article/details/8866402

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<stdio.h>
./fk.c:#include<math.h>
./flower2.c:#include <stdio.h>
./flower2.c:#include <time.h>
./recursive_flower.c:#include<stdio.h>
./recursive_flower.c:#include <stdlib.h>
./recursive_flower.c:#include <time.h>
./recursive_flower.c:#define m 8
./flower.c:#include <stdio.h>
./flower.c:#include <stdlib.h>
./flower.c:#include <time.h>
./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开头的单词的行。
\>
锚定单词的结束,如'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],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。
\W
\w的反置形式,匹配一个或多个非单词字符,如点号句号等。
\b
单词锁定符,如: '\bgrep\b'只匹配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中grep命令的使用相关推荐

  1. 匹配行linux中grep命令的使用

    最近个人几篇文章介绍了改匹配行的文章. 关联文章的地址 linux中grep命令的用使 grep (global search regular expression(RE) and print out ...

  2. linux grep命令例子,Linux中grep命令的12个实践例子

    grep是每个Linux发行版都预装的一个强有力的文件模式搜索工具.无论何种原因,如果你的系统没有预装它的话,你可以很容易的通过系统的包管理器来安装它(Debian/Ubuntu系中的apt-get和 ...

  3. Linux中grep命令的12个实践例子

    你是否遇到过需要在文件中查找一个特定的字符串或者样式,但是不知道从哪儿开始?那么,就请grep来帮你吧. grep是每个Linux发行版都预装的一个强有力的文件模式搜索工具.无论何种原因,如果你的系统 ...

  4. linux中grep命令查找目录下,linux中查找grep与find命令的使用

    在日常工作中,我们常常会在自己的电脑寻找某些不知道放在哪里的私密文件,通常我们会在资源管理器的搜索栏里输入一些关键字去帮助我们快速去定位查找该文件.在linux系统中也有这样的功能,只不过在linux ...

  5. 12个 Linux 中 grep 命令的超级用法实例

    作者丨tecmint linux.cn/article-2250-1.html 你是否遇到过需要在文件中查找一个特定的字符串或者样式,但是不知道从哪儿开始?那么,就请grep来帮你吧. grep是每个 ...

  6. linux中grep命令详解及使用示例

    文章目录 一.grep命令基本介绍 二.grep命令常见的用法 1. 匹配包含关键词的所有行 2. 匹配不包含关键词的所有行 3. 统计包含关键词的行数 4. 统计包含关键词所有行数,不区分大小写 5 ...

  7. Linux中grep命令

    1.grep介绍 grep命令是Linux中的一个强大的文本过滤查找工具,可接正则表达式过滤,把匹配行打印出来 基本语法 grep [-option] pattern filename 2.常用参数 ...

  8. linux中grep命令 菜鸟教程,linux grep正则表达式与grep用法详解

    需要大家牢记:正则表达式与通配符不一样,它们表示的含义并不相同 正则表达式只是字符串的一种描述,只有和支持正则表达式的工具相结合才能进行字符串处理.本文以grep为例来讲解正则表达式. grep命令 ...

  9. linux中grep命令返回值,grep命令详解

    如果你是一个新手,请从头阅读这篇文章,如果你只是忘记了grep命令的一些常用选项,直接查看文章尾部的总结部分即可. 先说说grep命令能做什么? 我们可以使用grep命令在文本中查找指定的字符串,就像 ...

  10. linux中grep命令返回值,Linux 操作命令 grep

    1.简介 grep 是个很强大的命令,用来找到文件中的匹配文本,并且能够接受正则表达式和通配符,同时可以用多个 grep 命令选项来生成各种格式的输出 1.1 搜索/过滤 grep 的工作方式是这样的 ...

最新文章

  1. 二叉树的建立和遍历程序代码(Java,C)
  2. C语言用循环结构算平均值,C语言循环结构选择题().doc
  3. python的核心理念_python核心基础 - 草稿
  4. 6.0后,全局悬浮窗或者弹窗不显示的解决办法
  5. 我的C站万粉成长之路、2021 笔耕不辍
  6. 【GAMES-202实时渲染】1、软阴影01(Shadow Mapping、Peter Panning、PCSS原理超详细)
  7. Canvas 文字对齐方式
  8. Python网络爬虫的概念和基本原理
  9. 360网站卫士推出风行计划 号称速度提升5倍
  10. 2021年终总结,程序员的日子
  11. SEO(什么是seo,如何优化seo)
  12. 新鲜出炉的一款SpringBoot +Vue的考试系统
  13. 【labview教程02】labview的前世今生
  14. 所有的双色球开奖记录都在这里了
  15. nextpolish安装_NECAT | Nanopore数据的高效组装工具
  16. linux 双显示器双鼠标
  17. 【实习秋招篇之C++面经】
  18. c++注意点(刷题笔记)
  19. MAPICS系统简单概述(zt)
  20. PS小技巧--无法保存为png格式

热门文章

  1. 六石风格:雨伞用袋子套起来
  2. 使用Beyond Compare一类文件目录比较器时,要注意忽略的目录文件设置
  3. no symbol version section for versioned symbol `memcpy@GLIBC_2.4'
  4. 全网首发:怎样加快android doubango的编译速度?
  5. 都觉得自己亏了,那谁赚了——评英国脱欧与俄白统一
  6. 低档显卡无法支持2K显示器
  7. Nsight中给工程添加include目录
  8. 重装服务器,解决怪问题
  9. 管理感悟:建议工作文档多使用表格EXCEL
  10. priority_queue的优先级设置