基础正则表达式和fgrep详解

grep/ egrep

语法: grep [-cinvABC] ‘word’filename

-c :打印符合要求的行数

-i :忽略大小写

-n :在输出符合要求的行的同时连同行号一起输出

-v :打印不符合要求的行

-A :后跟一个数字(有无空格都可以),例如 –A2则表示打印符合要求的行以及下面两行

-B :后跟一个数字,例如 –B2 则表示打印符合要求的行以及上面两行

-C :后跟一个数字,例如 –C2 则表示打印符合要求的行以及上下各两行

#grep -A 2 halt /etc/passwd

a. 过滤出带有某个关键词的行并输出行号

# grep -n “root ” /etc/passwd

显示内容是在etc/passwd 中含有root的行

b. 过滤不带有某个关键词的行,并输出行号

# grep -vn “root”/etc/passwd

显示在etc/passwd下 不含有root的行和行号

c. 过滤出所有包含数字的行

你可以先创建一个文件 #touch  test.txt

在里面输入一些子母行  数字行

然后# grep “[0-9]”test,.txt 显示数字行

grep -v“[0-9]”test,.txt 显示非数字行

在前面也提到过这个”[ ]”的应用,如果是数字的话就用[0-9]这样的形式,当然有时候也可以用这样的形式[15]即只含有1或者5,注意,它不会认为是15。如果要过滤出数字以及大小写字母则要这样写[0-9a-zA-Z]。另外[ ]还有一种形式,就是[^字符] 表示除[ ]内的字符之外的字符

这就表示筛选包含oo字符串,但是不包含r字符。

d. 过滤出文档中以某个字符开头或者以某个字符结尾的行

# grep "^r.*t$" /etc/passwd   查找在、etc/passwd下fei

注:  所有行中含有以r开头以t结尾中间可以是任意字符的行

在正则表达式中,”^”表示行的开始,”$”表示行的结尾,那么空行则表示”^$”,如果你只想筛选出非空行,则可以使用 “grep -v ‘^$’ filename”得到你想要的结果。


e. 过滤任意一个字符与重复字符

 # grep “r..o”/etc/passwd

     显示所有含r..o的文件

“.”表示任意一个字符,上例中,就是把符合r与o之间有两个任意字符的行过滤出来。

“*”表示零个或多个前面的字符。

f. 指定要过滤字符出现的次数

   # grep "1\{1,3}\" /etc/passwd

      显示含有1(并且至少含有1个之多含有三个)的文件

这里用到了{ },其内部为数字,表示前面的字符要重复的次数。上例中表示包含有两个o 即’oo’的行。注意,{ }左右都需要加上脱意字符’\’。另外,使用{ }我们还可以表示一个范围的,具体格式是 ‘\{n1,n2\}’其中n1<n2,表示重复n1到n2次前面的字符,n2还可以为空,则表示大于等于n1次。

1:上面部分说的grep,另外我们常常用到egrep这个工具,简单来说,后者是前者的扩展版本,我们可以用egrep完成grep不能完成的工作,当然了grep能完成的egrep完全可以完成。如果你嫌麻烦,egrep了解一下即可,因为grep的功能已经足够介绍egrep不用于grep的几个用法。为了试验方便

筛选一个或一个以上前面的字符

   # egrep “0+”/etc/passwd

         显示文件中含有一个0或一个以上的0的文件

和grep 不同的是,egrep这里是使用’+’的。

b. 筛选零个或一个前面的字符


#egrep  “0?”/etc/passwd

筛选出文件(含有一个或者零个)0的文件

c. 筛选字符串1或者字符串2

 # egrep “abc|123” /etc/passwd

   s筛选出含有abc或者123的文件

中间有一个’|’表示或者的意思,笔者用这个用的很多,所以这个你最好记一下。

d.egrep’( )’的应用

用’( )’表示一个整体,例如(oo)+就表示1个’oo’或者多个’oo’

语法:
grep [选项][查找模式][文件名1,文件名2,……]
egrep [选项][查找模式][文件名1,文件名2,……]
fgrep [选项][查找模式][文件名1,文件名2,……]
  这组命令各选项的含义为:
- E 每个模式作为一个扩展的正则表达式对待。
- F 每个模式作为一组固定字符串对待(以新行分隔),而不作为正则表达式。
- b在输出的每一行前显示包含匹配字符串的行在文件中的字节偏移量。
- c 只显示匹配行的数量。
- i 比较时不区分大小写。
- h 在查找多个文件时,指示grep不要将文件名加入到输出之前。
- l 显示首次匹配串所在的文件名并用换行符将其隔开。当在某文件中多次出现匹配串时,不重复显示此文件名。
- n 在输出前加上匹配串所在行的行号(文件首行行号为1)。
- v 只显示不包含匹配串的行。
- x 只显示整行严格匹配的行。
- e expression 指定检索使用的模式。用于防止以“-”开头的模式被解释为命令选项。
- f expfile 从expfile文件中获取要搜索的模式,一个模式占一行。

相当于执行grep指令加上参数"-F",详见grep指令说明。

fgrep 命令于 grep 和 egrep 命令不同,因为它搜索字符串而不是搜索匹配表达式的模式。fgrep 命令使用快速的压缩算法。$, *, [, |, (, ) 和 \ 等字符串被 fgrep 命令按字面意思解释。这些字符并不解释为正则表达式,但它们在 grep 和 egrep 命令中解释为正则表达式。因为这些字符对于 shell 有特定的含义,完整的字符串应该加上单引号(‘ ... ’)。. 如果没有指定文件, fgrep 命令假定标准输入。一般,找到的每行都复制到标准输出中去。如果不止一个输入文件,则在找到的每行前打印文件名。

4注意:编辑

1. fgrep 命令和带 -F 标志的 grep命令是一样的但出错和用法消息不同-s 标志功能也不同。

2. 每行限制在 2048 个字节。

3. 段落(-p 标志下)目前限制在5000个字符的长度。

4. 不要在特定的文件中运行 grep 命令,因为会产生不可预料的结果。

5. 输入行不能包含空字符。

6. 输入文件应该以换行字符结尾。

7. 虽然可以同时指定很多标志,但某些标志会覆盖其余的标志。例如,如果同时指定 -l 和 -n ,只有文件名写入到标准输出中去。

标志

-b 在找到的每行之前添加行所在的块编号。使用此标志有助于按照上下文查找磁盘块号码。-b 标志不能用于标准输入或者管道输入。

-c 仅显示匹配行的计数。

-e 模式指定模式。这个工作模式很简单,但当此模式以 a-(减号) 开头时却是很有用的。

-f StringFile 指定包含字符串的文件。

-h 当多个文件被处理时隐藏文件名。

-i 当进行比较时忽略字母的大小写。

-l 只列出包含匹配行的文件名(一次)。文件名之间用换行符分隔。

n 将文件中每行的相对行号置于行前。

-pSeparator 显示包含匹配行的整个段落。段落之间将按照Separator参数指定的段落分隔符加以分隔,这些分隔符是与搜索模式有着相同格式的模式。包含段落分隔符的行将仅用作分隔符;它们不会被包含在输出中。缺省的段落分隔符是空白行。

-q 禁止所有写入到标准输出的操作,不管是否为匹配行。如果选中输入行,以 0 状态退出。

-s 仅显示出错消息。这在检查状态时很有用。

-v 显示除了匹配特定模式的行以外的所有行。

-w 执行单词搜索。

-x 显示匹配模式的行,要求无额外的字符

-y 当进行比较时忽略字符的大小写。

5退出状态编辑

此命令返回以下出口值:

0 找到匹配项。

1 未找到匹配项。

>1 发现语法错误,或者文件不可访问(即使找到了匹配项)。

6示例编辑

1. 搜索几个文件中的一个简单字符串:

fgrep strcpy *.c

当前目录下所有以 .c 字符串结尾的文件中搜索字符串 strcpy。

2. 计数匹配某模式的行数:

fgrep -c 『{』pgm.cfgrep -c 『}』pgm.c

显示在 pgm.c 中包含左括号和右括号的行的数目。

如果在您的 C 程序中一行中没有包含多于一个 { (左括号) 或者 } (右括号),并且括号正确匹配,那么这两个数字将是一样的。如果这两个数字不一样,您可以将包含括号的行按照他们在文件中的位置顺序显示出来,使用以下命令:

egrep {\|} pgm.c

3. 显示包含某模式的文件名:

fgrep -l strcpy *.c

搜索当前目录下以 .c 结尾的文件,然后显示包含 strcpy 字符串的文件名。

7文件编辑

/usr/bin/fgrep 包含 fgrep 命令。

/bin/fgrep 链接到 fgrep 命令的符号。

基础正则表达式和fgrep详解

时间: 2024-10-05 03:57:14

基础正则表达式和fgrep详解的相关文章

mysql基础篇 - SELECT 语句详解

基础篇 - SELECT 语句详解 SELECT语句详解 一.实验简介 SQL 中最常用的 SELECT 语句,用来在表中选取数据,本节实验中将通过一系列的动手操作详细学习 SELECT 语句的用法. 二.实验准备 在正式开始本实验内容之前,需要先下载相关数据库表,搭建好一个名为mysql_shiyan 的数据库(有三张表:department,employee,project),并向其中插入数据. 具体操作如下,首先输入命令进入 /home/shiyanlou/Desktop 目录: cd /

php正则表达式以及正则函数详解

php正则表达式以及正则函数详解 发布时间: 2012-03-21 浏览次数:21493 分类: PHP教程 正则表达式是php中一个非常重要的知识点,通常用来查找和替换字符串,最常用的就是验证用户输入的信息格式是否正确,如邮件格式.电话格式等等.还有比如采集器之类的软件中,正则也是必用不可! 现在开始来学习正则表达式的基本语法: 1.“/”是定界符,“/”定界符之间的部分就是将要在目标对象中进行匹配的模式.同时为了正则更加灵活,引入了元字符,即“+”, “*”,以及 “?”. (1)“+”元字

[转]notepad++正则表达式替换字符串详解

原文:http://blog.csdn.net/qinboecjtu/article/details/6035028 正则表达式是一个查询的字符串,它包含一般的字符和一些特殊的字符,特殊字符可以扩展查找字符串的能力,正则表达式在查找和替换字符串的作用不可忽视,它 能很好提高工作效率. EditPlus的查找,替换,文件中查找支持以下的正则表达式: 表达式 说明 /t 制表符. /n 新行. . 匹配任意字符. | 匹配表达式左边和右边的字符. 例如, "ab|bc" 匹配 "

java基础之HTTP协议详解

关于本文,是听了某个老师的课程之后倍感自己对HTTP了解不够深入,因此决定写此博文. 首先,可以参考此文:http://blog.csdn.net/gueter/article/details/1524447 第一部分:浏览器与服务器通信过程: 第二部分:HTTP请求介绍: 第三部分:HTTP协议响应 java基础之HTTP协议详解

Linux基础知识之挂载详解(mount,umount及开机自动挂载)

Linux基础知识之挂载详解(mount,umount及开机自动挂载) 转载自:http://www.linuxidc.com/Linux/2016-08/134666.htm 挂载概念简述: 根文件系统之外的其他文件要想能够被访问,都必须通过"关联"至根文件系统上的某个目录来实现,此关联操作即为"挂载",此目录即为"挂载点",解除此关联关系的过程称之为"卸载" 1.挂载:根文件系统外通过关联至根文件系统上的某个目录来实现访问

Java基础 之Java动态绑定详解

程序绑定的概念: 绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来.对java来说,绑定分为静态绑定和动态绑定:或者叫做前期绑定和后期绑定 静态绑定(早绑定 编译器绑定): 在程序执行前方法已经被绑定,此时由编译器或其它连接程序实现.例如:C. 针对java简单的可以理解为程序编译期的绑定:这里特别说明一点,java当中的方法只有final,static,private和构造方法是前期绑定 动态绑定(迟绑定 运行期绑定): 后期绑定:在运行时根据具体对象的类型进行绑定. 若一种语言实现

AxureRP7.0基础教程系列 部件详解水平线和垂直线 HORIZONTAL & VERTICAL LINES

原型库网站-讲师金乌原创发布,可自由转载,请注明出处! Axure中文官网:www.AxureRP.cn   <AxureRP7.0部件详解> 水平线和垂直线 HORIZONTAL & VERTICAL LINES 使用案例 将页面区块化 最常见的用法是将内容分解成几个部分,比如,讲页面分为 header 和 body. 编辑线条 添加箭头 线条可以通过工具栏中的箭头样式转换为箭头:选中线条,点击箭头样式,在下拉列表中选择箭头样式. 线宽.颜色和样式 线条可以添加颜色.设置宽度和添加样

基础拾忆------委托详解

目录: 基础拾忆------委托详解 基础拾忆------接口详解 基础拾忆------泛型详解 前言: C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针.委托是存有对某个方法的引用的一种引用类型变量.引用可在运行时被改变.委托(Delegate)特别用于实现事件和回调方法.所有的委托都派生自 System.Delegate 类.把一个方法当作参数传递,让其它方法进行调用执行. 好比:今天中午不想出去,委托小明帮我带份饭,我要买饭,但是小明帮我买的. 1.委托的声明 委托声

基础拾忆------接口详解

目录: 基础拾忆------接口详解 基础拾忆------泛型详解 前言 接口定义了所有类继承接口时应遵循的契约.接口定义了 "要什么" ,派生类定义了 "怎么给" . 引用CLR VIA C#(类和接口继承) 在Microsoft.Net Framwork中,有一个名为System.Object的类,它定义了4个公共实例方法:ToString, Equals, GetHashCode和GetType.该类是其他所有类的根或者说最终基类.换言之,所有类都继承了Obj