如何在Linux和类Unix系统中使用Grep命令的正则表达式?Linux自带GNU grep命令工具,支持扩展正则表达式,GNU grep在所有Linux系统中默认可用。Grep命令用于搜索和定位存储在服务器或工作站上的任何信息。
正则表达式
正则表达式是用于匹配每行输入的模式,模式指的是一系列字符。下面是一个例子:
^w1grep正则表达式示例
在/etc/passswd目录中搜索“vivek”。
grep vivek /etc/passwd输出示例:
Vivek: x: 1000: 1000: Vivek gite,,:/home/vivek:/bin/bash任意大小写搜索vivek(即不区分大小写的搜索)。
Grep -i -w vivek /etc/passwd在任何情况下搜索vivek或raj。
grep-e-I-w \’ vivek | Raj \’/etc/passwd上面最后一个例子展示了一个扩展的正则表达式模式。
定位点
您可以分别使用“和$”符号来有规律地匹配输入行的开头或结尾。以下示例搜索显示了仅以vivek开头的输入行:
grep ^vivek /etc/passwd输出示例:
Vivek:X:1000:1000:viveggite,,:/home/vivek:/bin/bash可以只搜索出以单词vivek开头的行,也就是不会显示英文单词分隔符如vivek git和vivekg。)
找到以单词:
grep \’foo
文件名
仅包含foo的匹配行:
格雷普·\’^foo
文件名
下面显示的示例可以搜索空行:
格雷普·\’^
文件名
性格类型
匹配vivek或Vivek:
Grep \'[vV]ivek \’文件名或
grep \'[vV][iI][Vv][Ee][kK]\’的文件名也可以匹配数字(即匹配vivek1或Vivek2等。):
grep -w \'[vV]ivek[]\’的文件名可以匹配两个数字字符(foo11、foo12等。):
grep \’foo[0-9][]\’的文件名不限于数字,还可以匹配至少一个字母:
grep \'[A-Za-z]\’的文件名显示所有带有“w”或“n”字符的行:
grep [wn]文件名用括号括起来的表达式,也就是用“:”和“:]”括起来的字符类的名称,表示属于这个类的所有字符的列表。标准字符类名如下:
[:alnum:]-字母数字字符
[:alpha:]-字母字符
[:blank:]- 空字符:空大小写键和制表符。
[:digit:]-数字:“0 1 2 3 4 5 6 7 8 9”
[:lower:]-小写字母:\’ a b c d e f g h i j k l m n o p q r s t u v w x y z \’
[:space:]- 空大小写字符:制表符、换行符、垂直制表符、换页符、回车符和空大小写键。
[:upper:]-大写字母:\’ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z \’
此示例中显示的是匹配所有大写字母:
Grep \'[:upper:]\’文件名通配符
可以用“.”匹配单个字符。在示例中,匹配以“b”开头并以“t”结尾的三个字符的单词:
grep \’/& lt;\’ b.t/> \’文件名在这里,
匹配单词前的空字符串。
匹配单词后的空字符串。
打印出只有两个字符的所有行:
格雷普·\’^..
文件名
显示以点和数字开头的线条:
Grep\’/。[]\’文件名点字符转义
将下面的正则公式与IP地址192.168.1.254匹配是不正确的:(LCTT翻译:可以匹配这个IP地址,但也有可能匹配一个类似的格式,用点以外的间隔符号)
Grep \’192.168.1.254\’ /etc/hosts都需要转义:
grep \’ 192/. 168/. 1/. 254 \’/etc/hosts下面的例子只能匹配IP地址:(LCTT翻译:其实这个正则表达式由于IP地址中数字的范围并不准确)
Egrep\’ [[:digital:]] {1,3}/。[[:digital:]] {1,3}/。[[:digital:]] {1,3}/。[[:digital:]] {1,3} \’如何搜索文件名?
要使用-e选项搜索匹配的\’-test-\’字符串,如果未使用-e选项,grep命令将尝试将\’-test-\’解析为自己的选项参数:
Grep -e \’ – test -\’如何将文件名与Grep的OR匹配?
使用以下语法:
Grep -E \’word1|word2 \’文件名或
grep \’word1/|word2 \’的文件名如何与grep的“and”匹配?
使用以下语法显示包含“word1”和“word2”的所有行。
Grep \’word1 \’文件名| grep \’word2 \’如何使用序列检测?
使用以下语法,您可以检测一个字符在序列中的重复次数:
{N}匹配字符“v”两次:
Egrep \”v{2} \”以下命令可以匹配\” col \”和\” cool \”:
egrep \’co{1,2}l \’文件名下的命令将匹配所有至少包含三个\’ c \’字符的行。
egrep \’c{3,} \’的文件名下面的例子会匹配91-1234567890(即两位数-十位数)格式的手机号码。
grep \”[:digit:]]/{ 2/}[-]/?[[:digit:]]/{10/} \”文件名如何让grep命令高亮显示?
使用以下语法:
grep – color正则表达式的文件名只显示匹配的字符,不显示匹配的行怎么样?
使用以下语法:
Grep -o正则表达式文件名正则表达式限定符
限定符描述.匹配任意的一个字符。?匹配前面的子表达式,最多一次。*匹配前面的子表达式零次或多次。+匹配前面的子表达式一次或多次。{N}匹配前面的子表达式 N 次。{N,}匹配前面的子表达式 N 次到多次。{N,M}匹配前面的子表达式 N 到 M 次,至少 N 次至多 M 次。-只要不是在序列开始、结尾或者序列的结束点上,表示序列范围。^匹配一行开始的空字符串;也表示字符不在要匹配的列表中。$匹配一行末尾的空字符串。\\b匹配一个单词前后的空字符串。\\B匹配一个单词中间的空字符串。\\<匹配单词前面的空字符串。\\>匹配单词后面的空字符串。
Grep和egrep
Egrep相当于
Grep -E它将以扩展正则表达式的形式解释模式。以下内容来自grep的帮助页面:
基本正则表达式元字符?、+、{、|、(和)都失去了原来的意义。如果您想使用它们,请使用反斜杠version/?,/+,/{,/|,/(和/)。传统的egrep不支持元字符,egrep的一些实现被/{,所以一个可移植的脚本应该避免使用grep -E中的{符号,而应该使用[}]来匹配文字{。
GNU grep -E尽量支持传统用法,如果{出现在无效的区间规范字符串之前,会假设{不是特殊字符。
例如,grep-E“{ 1 }”命令搜索包含两个字符{ 1 }的字符串,而不报告正则表达式语法错误。
POSIX.2标准允许扩展这个操作,但是应该避免在可移植脚本文件中使用。
地址:http://www.linuxprobe.com/regular-expressions-in-grep.html.
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。