基础正则表达式和fgrep详解

前端之家收集整理的这篇文章主要介绍了基础正则表达式和fgrep详解前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

grep/ egrep

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

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

-i:忽略大小写

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

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

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

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

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

#grep -A 2 halt /etc/passwd

wKiom1PFEOTwY9V_AAJHnD7h1YU171.jpg

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

# grep -n “root ” /etc/passwd

wKiom1PFELXCTEV1AACOks4RrT8761.jpg

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

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

wKioL1PFEGnjwr0MAAEZULcm6zU896.jpg

# grep -vn “root”/etc/passwd

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

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

wKioL1PFD8zzePbgAAEN-HT1mAo673.jpg

你可以先创建一个文件 #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.过滤出文档中以某个字符开头或者以某个字符结尾的行

wKioL1PFECKBgdV9AAHV8vQQQSE095.jpg

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

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

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


wKiom1PFDvvRC8ECAAEUF8r-xsM882.jpg

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

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

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

wKioL1PFDqLgAXBjAAC_aDQL6YA806.jpg

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

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

wKiom1PFDqPz5_zGAAEPkpJ_aIw224.jpg

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

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

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

wKioL1PFDlCj3_6NAAERaygn3LY012.jpg

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

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

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

# egrep “0+”/etc/passwd

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

wKioL1PFDhaj00M6AAEkAFrg1Oc558.jpg

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

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

#egrep “0?”/etc/passwd

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

wKiom1PFDeuhb4ukAAFxogCVVLo119.jpg

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

# egrep “abc|123” /etc/passwd

wKiom1PFDbXTo5LYAAB8DLIfiwE039.jpg

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

[image]

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

d.egrep’( )’的应用

wKioL1PFDUKj2YsDAACoJyY7Q4A677.jpg

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

spacer.gif

spacer.gif

spacer.gif

spacer.gif

spacer.gif

spacer.gif

spacer.gif

wKioL1PFDPzzs216AACNSfBhMpw882.jpg

语法:
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 命令的符号。

原文链接:https://www.f2er.com/regex/361529.html

猜你在找的正则表达式相关文章