linux-9.0-grep
grep/egrep/fgrep
grep、egrep、fgrep:搜索文件中满足特定模式(pattern)或字符串的内容,将结果输出到1,不改变原文件。
(UNIX中的patterns被称为 _Regular Expressions_)
grep=”Global,Regular Expressions,Print”,即“在文件全局中用正则表达式搜索结果打印输出”
grep、egrep能在一个或多个文件等内容中搜索某一特定的Character Pattern(R.E.)。
grep
grep命令支持以下几种正则表达式的元字符(regular expression metacharacters),即通配符:
c*
:将匹配0个(即空白)或多个字符c(c为任一字符)。.
:将匹配任何一个字符而且只能是一个字符。[xyz]
:将匹配方括号中的任意一个字符。[^xyz]
:将匹配不包括方括号中的字符的所有字符。^
:锁定行的开头。$
:锁定行的结尾。
在基本正则表达式中:
如元字符*
、+
、{
、|
、(
和 )
已经失去了它们原来的含义,
如果要恢复它们原本的含义要在之前冠以反斜线’\‘,如 \*
、\+
、\{
、\|
、\(
和 \)
。
grep命令是用来在每一个文件中或标准输出上搜索特定的模式。
当使用grep命令时,包含一个指定字符模式的每一行都会被打印在屏幕上,
使用grep命令并不改变文件中的内容。
1 | grep 选项 模式 文件名 |
e.g.
1 | $ grep CLERK emp.data #显示包含了CLERK的行 |
egrep
/* egrep 在RHEL等Linux上其实是「grep -E」的别名 \*/
egrep的语法格式与grep命令相同,
但egrep是用来在一个或多个文件的内容中利用**扩展的正则表达式**的元字符搜索特定的模式。egrep所增加的元字符:
- +:匹配一个或多个前导字符。
- a|b:匹配a或b。
- (RE):匹配括号中的正则表达式RE。
e.g.
1 | $ egrep '[1-5]+000' emp.data # 匹配1000,2000,3000,4000,5000 |
fgrep
/* fgrep 在RHEL等Linux上其实是「grep -F」的别名 */
fgrep也用来在一个或多个文件中搜索与指定字符串匹配的行。
搜索文件fgrep的速度要比grep快,
fgrep可以一次迅速地搜索多个模式。
与grep不同,fgrep命令不能搜索任何正则表达式,
即将通配符当作普通字符来处理(按该字符的字面意思来处理)。
搜索文件命令fgrep不能使用特殊字符,只能搜索确定的模式。
fgrep既可以在命令行上键入搜索的模式,
也可以使用-f选项从文件中读取要搜索的模式。
e.g.
1 | $ cat emp.fmt | fgrep -f conditions |