linux的grep命令,解释一下perlgrep 正则表达式 或在这里怎么用,以及语法

浅谈Linux 的grep命令与正则表达式_Linux教程_Linux公社-Linux系统门户网站
你好,游客
浅谈Linux 的grep命令与正则表达式
来源:Linux社区&
作者:zhengliyang
今日我们来简要的分析Linux 中的grep命令与正则表达,无论是刚学习Linux的新手还是有着丰厚经验的大师,在我们学习Linux的生涯当中,grep命令和正则表达式这些知识是需要我们从了解熟悉到熟练运用的重要内容。
一、grep命令的使用
首先,我们来了解grep命令,grep (global search regular expression and printing),全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Linux中的grep命令包括、grep, egrep和fgrep 。egrep是grep的扩展,支持更多的re元字符,fgrep就是fast grep,搜索字符比较快,但不支持正则表达式。
然后,我们再来熟悉一下grep命令,其命令格式为:grep [options] &pattern& FILE 。其中grep的常见选项:
-v:反向选取,只显示不符合模式的行;
-o:只显示被模式匹配的字串,而不是整个行;
-i:不区分字符的大小写;
-r:递归搜索;
-A #:显示匹配到行时,顺带显示其后面的#个行;
-B #:显示匹配到行时,顺带显示其前面的#个行;
-C #:显示匹配到行时,顺带显示其前后的#个行;
另外 ,为了用户查看显示匹配的结果,可以在grep命令之后输入& &--color=auto&,使结果呈现颜色。
二、 正则表达式
上面我们提到使用grep命令搜索正则表达式,那么我们来学习一下什么是正则表达式。
对于正则表达式,其起源并非在linux 中,正则表达式的&鼻祖&或许可一直追溯到科学家对人类神经系统工作原理的早期研究。而其含义是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个&规则字符串&,这个&规则字符串&用来表达对字符串的一种过滤逻辑。给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
1. 给定的字符串是否符合正则表达式的过滤逻辑(称作&匹配&);
2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。
正则表达式由一些普通字符和一些元字符(metacharacters)组成。元字符不表示字符本身的意义,而用于额外功能性的描述。正则表达式的类型包括基本正则表达式和扩展正则表达式。
三、基本正则表达式
^:锚定行首的符合条件内容,用法格式 "^pattern";
$: 锚定行尾的符合条件内容,用法格式 "pattern$";
*:匹配紧挨着其前面的字符任意次 ;
.:匹配任意单个字符;
.*:匹配任意长度的任意字符(贪婪模式,尽可能的匹配);
r.*h (非锚定), ^r.*h$(锚定)
[] :匹配指定范围内的任意单个字符;
[^]:匹配指定范围外的任意单个字符 ;
[[:space:]]:空白字符;
\?:匹配紧挨着在其前面的字符0次或1次;
\{m,n\}:匹配其前面的字符至少m次,& 至多n次;
\{m,\}:至少m次,\{0,n\}:至多n次,0-n次;
\{m\}:精确匹配到m次;
\&:锚定词首,用法格式:\&pattern;
\&: 锚定词尾,用法格式:\&pattern;
\&pattern&:锚定单词;
\(\):分组,用法格式:\(pattern\);
ab任意字符ab:ab.*ab;
a.b任意字符a.b;\(a.b\).*\1 (1的含义是以相同的内容出现)。
四、扩展正则表达式
.: 任意单个字符
[ ] : 匹配指定范围内的任意单个字符;
[^]:匹配指定范围外的任意单个字符 ;
*:匹配紧挨着其前面的字符任意次
+:匹配其前面的字符至少1次
{m,n}:至少m次,至多n次
():分组,支持引用\1,\2
a|b:二选一
\&: 锚定词首,用法格式:\&pattern;
\&: 锚定词尾,用法格式:\&pattern;
^ : 锚定行首的符合条件内容
$ : 锚定行尾的符合条件内容
正则表达式是如何运用在linux的命令中的呢下面我们一起来看看几简单的实例分析正则表达式。
五、 正则表达式与grep命令的实战演& & 练
1,显示/etc/rc.d/rc.sysinit文件中以不区分大小的h开头的行;
# grep& &^[hH]&& /etc/rc.d/rc.sysinit
2,& 显示/etc/passwd中以sh结尾的行;
# grep& &sh$&& /etc/passwd
3,& 显示/etc/fstab中以#开头,且后面跟两个或多个空白字符,而后又跟了任意非空白字符的行;
#grep& &^#[[:space:]]\{1,\}[^[:space:]]& /etc/fstab
4,& 显示/etc/rc.d/rc.local中符合形为&任意单个字符n任意字符任意单个字符n&模式的行;
# grep& &\(.i\).*\1&& /etc/rc.d/rc.local
5,& 查找/etc/inittab中含有&以s开头,并以d结尾的单词&模式的行;
# grep& &\&s[a-zA-Z]*d\&&&
/etc/inittab
&\&s[^[:space:]]*d\&&& /etc/inittab
6,& 查找ifconfig命令结果中的1-255之间的整数;
# grep | -E "\&([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\&"
7,显示/var/log/secure文件中包含&Failed&或&FAILED&的行;而后统计相关的行数
# egrep &(Failed | FAILED )& /var/log/secure& | wc -l
8,在/etc/passwd中取出默认shell为bash,且其用户ID号最小的用户的用户名
# grep "bash$" /etc/passwd | sort -n -t: -k3 | head -1 | cut -d: -f1
相关阅读:
Linux下Shell编程&&awk编程
Linux下Shell编程&&sed命令基本用法
Linux下Shell编程&&grep命令的基本运用
Linux下Shell编程&&正则表达式基础与扩展
相关资讯 & & &
& (09月17日)
& (07月28日)
& (10月04日)
& (09月01日)
& (07月24日)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款Linux 正则表达式详解
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了linux 正则表达式的一些使用方法,需要的朋友可以参考下
一.linux文本查找命令
在说linux正规表达式之前,还介绍下linux中查找文本文件常用的三个命令:
1.grep : 最早的文本匹配程序,使用POSIX定义的基本正则表达式(BRE)来匹配文本。
2.egrep : 扩展式grep,其使用扩展式正规表达式(ERE)来匹配文本。
3.fgrep : 快速grep,这个版本匹配固定字符串而非正则表达式。并且是唯一可以并行匹配多个字符串的版本。
如下简单的介绍grep命令:
语法格式:
grep [options ...] pattern-spec [files ...]
匹配一个或多个模式的文本行。
-E : 使用扩展正则表达式进行匹配, grep -E 或取代 egrep 命令。
-F : 使用固定字符串进行匹配, grep -F 或取代传统的fgrep命令。
-e : 通常第一个非选项的参数认为是要匹配的模式,也可以同时提供多个模式,只要将其放入单引号,并用换行字符分隔他们。
  模式以减号开头时,为防止混淆其为选项,-e选项说明其后的参数为模式,即使他以减号开头。
-f : 从pat-file文件读取模式作为匹配。
-i : 模式匹配时忽略大小写差异。
-l : 列出匹配模式的文件名称,而不是打印匹配的行。
-q : 静默的,如果匹配成功,不将匹配的行输出到标准输出;否则即是不成功。
-s : 不显示错误信息,通常与-q并用。
-v : 显示不匹配模式的行。
说明:可以同时查找多个文件中的内容,当指定多个文件时,每个显示出的文件行前会有文件名加一个冒号标识其来自哪个文件。
可以使用多个-e 或 -f 选项,建立要查找的模式列表。
二.正则表达式简要介绍
1.正则表达式的组成
(1).一般字符:没有特殊意义的字符
(2).特殊字符(meta字符):元字符,有在正则表达式中有特殊意义
2.如下讲下正则表达式中的常见meta字符
(1).POSIX BRE与ERE中都有的meta字符:
\&& :&&通常用于打开或关闭后续字符的特殊含义,如\(...\)与\{...\}
.& &:&& 匹配任何单个字符(除NUL)
*& :&& 匹配其前的任何数目或没有的单个字符,例: . 表示任一字符, 则 .* 匹配任一字符的任意长度
^& :&& 匹配紧接着的正则表达式,BRE中仅在正则表达式的开头有特殊的含义,ERE中在任何位置都有特殊含义
$& :&& 匹配前面的正则表达式,在字符串或者行结尾处。BRE中仅在正则表达式的结尾处有特殊的含义,ERE中在任何位置都有特殊含义
[]& :&& 匹配方括号内的任一字符,其中可用连字符(-)指的连续字符的范围;^符号苦出现在方括号的第一个位置,则表示匹配不在列表中的任一字符,
(2).POSIX BRE中才有的字符:
\{n,m\} : 区间表达式,匹配在它前面的单个字符重现的次数区别。\{n\}指重现n次;\{n,m\}指重现n至m次;
\( \) : 保留空间,可以将最多9个独立的子模式存储在单个模式中。如\(ab\).*\1 : 指匹配ab组合的两次重现,中间可存在任意数目的字符。
\n : 重复在\(与\)方括号内第n个子模式至此点的模式。
(3).POSIX ERE中才有的字符:
{n,m} : 与BRE的\{n,m\}功能相同
+ : 匹配前面正则表达式的一个或多个扩展
? : 匹配前面正则表达式的零个或一个扩展
| : 匹配|符号前或后的正则表达式
( ) : 匹配方括号括起来的正则表达式群
(4).&方括号([])表达式
4.1.字符集& [:& :]
标识字符集,有如下几种:
[::alnum] : 数字字符
[:digit:] : 数字字符
[:punct:] : 标点符号字符
[:alpha:] : 字母字符
[:graph:] : 非空格字符
&[:space:] : 空格字符
[:blank:] : 空格与定位字符
[:lower:] : 小写字母字符
[:upper:] : 大写字母字符
[:cntrl:] : 控制字符
[:print:] : 可显示的字符
[:xdigit:] : 16进制数字
&4.2.排序符号
指将多个字符视为一个符号,如[.ch.]即将ch视为一个符号
4.3.等价字符
认为多个字符相等,如[=e=]在法文的locale里,可匹配于多种与e相似的字符,此处不再列出。
说明:这三种构造除其自身的方括号之外,还必须使用额外的方括号括起来。
例 : [[:alpha:]!] : 匹配任一英文字母或感叹号。
&&&&&&& [[.ch.] : 匹配ch排序元素,而不匹配单独的字母c或h.
&3.简单正规表达式匹配案例
china& :& 匹配此行中任意位置有china字符的行
^china&: 匹配此以china开关的行
china$ : 匹配以china结尾的行
^china$ : 匹配仅有china五个字符的行
[Cc]hina : 匹配含有China或china的行
Ch.na : 匹配包含Ch两字母并且其后紧跟一个任意字符之后又有na两个字符的行
Ch.*na : 匹配一行中含Ch字符,并且其后跟0个或者多个字符,再继续跟na两字符
如下通过常用实例来学习BRE和ERE匹配,源文件url.txt内容如下:
http://wwwbaiducom<baidu
匹配以http或者https开头,并且其后为:并且含有.的串
grep '^https\{0,1\}.*\..*' url.txt
grep -E&'^https?.*\..*' url.txt
匹配结果如下:
2.Email匹配
示例文件内容为:
aaaa@aaa@.com
匹配以字母数字或者下划线开头的多个字符,其后有一个@之后有多个字母数字或者下划线,其中有一个.号
grep '^[[:alpha:][:digit:]_]*@[[:alpha:][:digit:]]*\..*' email.txt
&匹配结果:
先到这里,后续再接着写。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具grep 命令系列:使用 grep 命令来搜索多个单词_Linux教程_Linux公社-Linux系统门户网站
你好,游客
grep 命令系列:使用 grep 命令来搜索多个单词
来源:Linux中国&
作者:Linux
要使用 grep 命令来搜索多个字符串或单词,我们该怎么做?例如我想要查找 /path/to/file 文件中的 word1、word2、word3 等单词,我怎么样命令 grep 查找这些单词呢?
匹配模式。要使用多单词搜索,请使用如下语法:
grep'word1\|word2\|word3'/path/to/file
下的例子中,要在一个名叫 /var/log/messages 的文本日志文件中查找 warning、error 和 critical 这几个单词,输入:
$ grep'warning\|error\|critical'/var/log/messages
仅仅只是要匹配单词(即该词两侧是单词分界符,针对西方以空格分隔的语言而言)的话,可以加上 -w 选项参数:
$ grep-w'warning\|error\|critical'/var/log/messages
egrep 命令可以跳过上面的语法格式,其使用的语法格式如下:
$ egrep -w'warning|error|critical'/var/log/messages
我建义您们加上 -i (忽略大小写) 和 --color 选项参数,如下示:
$ egrep -wi --color 'warning|error|critical'/var/log/messages
输出示例:
Fig.01: Linux / Unix egrep Command Search Multiple Words Demo Output
图一: Linux / Unix egrep 命令查找多个单词输出例子
grep使用简明及正则表达式
正则表达式的用法
正则表达式之零宽断言
Linux命令-文件文本操作grep&
grep正则表达式
Linux中正则表达式与文件格式化处理命令(awk/grep/sed)
本文永久更新链接地址:
相关资讯 & & &
& (09月01日)
& (07月24日)
& (09月17日)
& (07月28日)
& (06月03日)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款Linux grep命令用法以及正则表达式 - CSDN博客
Linux grep命令用法以及正则表达式
1.grep命令和正则表达式的简介
(1).grep(Global search REgular expression and Print out the line),即全局搜索正则表达式并打印出匹配的行,它是Linux系统中一个强大的文本搜索工具,它根据用户指定的“模式(pattern)”对目标文本进行过滤,显示被模式匹配到的行;
(2).正则表达式是由一类字符书写的模式,其中有些字符不表示符的字面意义,而是表示控制或通配的功能
2.grep命令的基本语法&#26684;式
&&&&grep [OPTION]... 'PATTERN' FILE...
grep的常用选项:
&&&&-v : 对匹配的行进行取反
&&&&-o : 仅显示匹配到的内容
&&&&-i : 忽略字符大小写
&&&&-n : 为匹配的行加上行号
&&&&-E : 使用扩展正则表达式 ,等同于egrep命令
&&&&-F : 不使用正则表达式搜索,等同于fgrep命令
&&&&-A # : 连同匹配行的下#行一并显示,#代表任意数字
&&&&-B # : 连同匹配行的上#行一并显示,#代表任意数字
&&&&-C # : 连同匹配行的上下#行一并显示,#代表任意数字
&&&&--color=auto : 对匹配的内容以不同的颜色显示
3.grep正则表达式的基本用法
基本正则表达式:
(1)字符匹配
. : 匹配任意单个字符
&&&&例:匹配以r开头,t结尾中间只隔了两个字符的行
[] : 匹配指定集合中的任意单个字符
常用的集合表示方法有:
&&&&&&&&纯数字:[[:digit:]]或[0-9]
&&&&&&&&小写字母:[[:lower:]]或[a-z]
&&&&&&&&大写字母:[[:upper:]]或[A-Z]
&&&&&&&&大小写字母:[[:alpha:]]或[a-zA-Z]
&&&&&&&&数字加字母:[[:alnum:]]或[0-9a-zA-Z]
&&&&&&&&空白字符:[[:space:]]
&&&&&&&&标点符号:[[:punct:]]
&&&&例1:匹配包含数字0或2的行(截图只包含前半部分)
&&&&例2:匹配包含字母r或t的行(截图只包含前半部分)
&&&&例3:匹配包含数字0-9的行(截图只包含前半部分)
[^] : 匹配指定集合外的任意单个字符
&&&&例:匹配包含除1-9范围之外的字符的行(截图只包含前半部分)
(2)次数匹配
* : 匹配其前面的字符出现任意次,0、1或多次的行
&&&&例:创建一个测试文本,包含有以下内容:
&&&&匹配x字母出现任意次的行:
\&#43; : 匹配其前面的字符出现1次或多次的行
&&&&例:匹配x字至少1次的行
\? : 匹配其前面的字符出现0次或1次的行
&&&&例:匹配x字母出现0次或1次的行
\{m\} : 匹配其前面的字符出现m次的行
&&&&例:匹配x字母出现2次的行
\{m,n\} : 匹配其前面的字符至少出现m次,至多出现n次的行,m和n表示一个范围m-n
&&&&例:匹配x字母至少出现1次,至多出现3次的行
(3)位置锚定
^ : 行首锚定
&&&&例:匹配x字母出现在在行首的行
$ : 行尾锚定
&&&&例:匹配e字母出现在行尾的行
^$ : 匹配空白行
&&&&例:匹配空白的行
\& : 词首锚定
&&&&例:精确匹配xy两个字母在一个单词的词首的行
\& : 词尾锚定
&&&&例:精确匹配xy两个字母在一个单词的词尾的行
\&\& : 匹配单词
&&&&例:匹配包含xy这个单词的行
\(\) : 对某字符串进行进行分组匹配
&&&&例:匹配xy单启出现0次或1次的行
后向引用:模式中,如果使用\(\)实现了分组,在某行文本的检查中,如果\(\)的模式匹配到了某内容,此内容后面的模式中可以被引用;
对前面的分组进行引用的符号为:\1 , \2 ,\3
模式自左而右,引用第#个左括号以及与其匹配右括号之间的模式匹配到的内容;
后向引用举例:
&&&&新建一个文本文件,假设有如下内容:
&&&&找出前后都有相同单词的行:
正则表达式元字符总结:
&&&&字符匹配:. ,[] ,[^]
&&&&次数匹配:* ,\? ,\&#43; ,\{m\} ,\{m,n\}
&&&&位置锚定:^ ,$ ,\& ,\& ,\&\&
&&&&分组匹配:\(\)
4.egrep及扩展正则表达式:
egrep相当于grep -E,egrep可以直接使用扩展正则表达式,而grep需要加上选项-E;
扩展正则表达式的元字符:
&&&&字符匹配:. ,[] ,[^]
&&&&次数匹配:*,?,&#43;,{m},{m,n},{m,},{0,n}
&&&&位置锚定:^,$,\&,\&
&&&&分组匹配:(),支持后向引用
&&&&| : 匹配左侧或右侧符合条件的行,比如a|b,含有a或b的行都匹配;
&&&&例1:egrep 等同于 grep -E
5.grep练习题:
(1).显示/proc/meminfo文件中以大写或小写s开头的行;
# grep -i '^s' /proc/meminfo
(2).显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户;
# grep -v '/sbin/nologin$' /etc/passwd | cut -d: -f1
(3).显示/etc/passwd文件中其默认shell为/bin/bash的用户
进一步:仅显示上述结果中其ID号最大的用户
# grep '/bin/bash$' /etc/passwd | cut -d: -f1 | sort -n -r | head -1
(4).找出/etc/passwd文件中的一位数或两位数;
# grep '\&[[:digit:]]\{1,2\}\&' /etc/passwd
(5).显示/boot/grub/grub.conf中至少一个空白字符开头的行
# grep '^[[:space:]]\&#43;.*' /boot/grub/grub.conf
(6).显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;
# grep '^#[[:space:]]\&#43;[^[:space:]]\&#43;' /etc/rc.d/rc.sysinit
(7).找出netstat -tan命令执行结果中包含'LISTEN'的行;
# netstat -tan | grep 'LISTEN[[:space:]]*$
(8).添加用户bash,testbash,basher,nologin(SHELL为/sbin/nologin),而找出当前系统上其用户名和默认SHELL相同的用户;
# grep '\(\&[[:alnum:]]\&#43;\&\).*\1$' /etc/passwd
(9).扩展题:新建一个文本文件,假设有如下内容:
He like his lover.
He love his lover.
He like his liker.
He love his liker.
找出其中最后一个单词是由此前某单词加r构成的行;
# grep '\(\&[[:alpha:]]\&#43;\&\).*\1r' grep.txt
(10).显示当前系统上root、centos或user1用户的默认shell及用户名;
# grep -E '^(root|centos|user1\&)' /etc/passwd
(11).找出/etc/rc.d/init.d/functions文件中某单词后面跟一对小括号'()&的行;
# grep -o '\&[[:alpha:]]\&#43;\&()' /etc/rc.d/init.d/functions
(12).使用echo输出一个路径,而使用egrep取出其基名;
# echo /etc/rc.d/ | grep -o '[^/]\&#43;/\?$' | grep -o '[^/]\&#43;'
本文已收录于以下专栏:
相关文章推荐
一、grep、egrep、fgrep命令
&#160; 本文中主要介绍了linux系统下grep egrep fgrep命令和正则表达式的基本参数和使用格式、方法。(注释:文中fg代表例子,)
1.grep命令和正则表达式的简介
(1).grep(Global search REgular expression and Print out the line),即全局搜索正则表达式并打印出匹...
使用 grep &#39;word1|word2&#39; 文件名 &#160;这样的命令是不对的!
应该使用如下的命令:
1,grep -E &#39;word1|word2&#39; 文件名
2,egrep &#39;wor...
grep: Global search REgular expression and Print out the line.
&#160;&#160; &#160;&#160;&#160; &#160;作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行...
grep语法:[root @test /root ]# grep [-acinv] &#39;搜寻字符串&#39; filenames-list参数说明:-a :将 binary 文件以 text 文件的方式搜寻数据...
一.正则表达式
1.1国际字符模式匹配或匹配模式的类名
[:alnum:] : 0-9,A-Z,a-z
[:alpha:] : A-Z,a-z
[:upper:] : A-Z
[:lower...
查找目录下的所有文件中是否含有某个字符串&#160;
find .|xargs grep -ri &IBM&&#160;
查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名&#160;
find .|xar...
grep -n &#39;the&#39; filename 在文件中匹配含有the字符串的行,连带行号打印grep -in &#39;the&#39; filename在文件中匹配含有the字符串的行,连带行号打印,忽略大小写gr...
linux命令sed和awk
sed,stream editor。是一个”非交互式“字符流编辑器。输入流通过程序并输出到标准输出端。
sed主要用来自动编...
首先要记住的是: 正则表达式与通配符不一样,它们表示的含义并不相同!
正则表达式只是一种表示法,只要工具支持这种表示法, 那么该工具就可以处理正则表达式的字符串。vim、grep、awk 、sed ...
他的最新文章
讲师:宋宝华
讲师:何宇健
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)今天看啥 热点:
全面解析Linux的grep命令中正则表达式的用法,全面解析grepLinux 附带有 GNU grep 命令工具,它支持扩展正则表达式extended regular expressions,而且 GNU grep 在所有的 Linux 系统中都是默认有的。Grep 命令被用于搜索定位存储在您服务器或工作站上的任何信息。
正则表达式正则表达式就是用于匹配每行输入的一种模式,模式是指一串字符序列。下面是范例:代码如下:^w1w1|w2[^ ]
grep 正则表达式示例在 /etc/passswd 目录中搜索 'vivek'代码如下:grep vivek /etc/passwd输出例子:代码如下:vivek:x::Vivek Gite,,,:/home/vivek:/bin/bashvivekgite:x:::/home/vivekgite:/bin/shgitevivek:x:::/home/gitevivek:/bin/sh搜索大小写任意的 vivek(即不区分大小写的搜索)代码如下:grep -i -w vivek /etc/passwd搜索大小写任意的 vivek 或 raj代码如下:grep -E -i -w 'vivek|raj' /etc/passwd上面最后的例子显示的,就是一个扩展的正则表达式的模式。
锚点你可以分别使用 ^ 和 $ 符号来正则匹配输入行的开始或结尾。下面的例子搜索显示仅仅以 vivek 开始的输入行:代码如下:grep ^vivek /etc/passwd输出例子:代码如下:vivek:x::Vivek Gite,,,:/home/vivek:/bin/bashvivekgite:x:::/home/vivekgite:/bin/sh你可以仅仅只搜索出以单词 vivek 开始的行,即不显示 vivekgit、vivekg 等(LCTT 译注:即该单词后面是空格、符号等英文的单词分隔符。)代码如下:grep -w ^vivek /etc/passwd找出以单词 word 结尾的行:代码如下:grep 'foo$' 文件名匹配仅仅只包含 foo 的行:代码如下:grep '^foo$' 文件名如下所示的例子可以搜索空行:代码如下:grep '^$' 文件名
字符类匹配 Vivek 或 vivek:代码如下:grep '[vV]ivek' 文件名或者代码如下:grep '[vV][iI][Vv][Ee][kK]' 文件名也可以匹配数字 (即匹配 vivek1 或 Vivek2 等等):代码如下:grep -w '[vV]ivek[0-9]' 文件名可以匹配两个数字字符(即 foo11、foo12 等):代码如下:grep 'foo[0-9][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& 结尾的3个字符的单词:代码如下:grep '\&b.t\&' 文件名在这儿,\& 匹配单词前面的空字符串\& 匹配单词后面的空字符串打印出只有两个字符的所有行:代码如下:grep '^..$' 文件名显示以一个点和一个数字开头的行:代码如下:grep '^\.[0-9]' 文件名
点字符转义下面要匹配到 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 '[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}' 文件名怎么样搜索以&-& 符号开头的匹配模式?要使用 -e 选项来搜索匹配 '--test--' 字符串,如果不使用 -e 选项,grep 命令会试图把 '--test--' 当作自己的选项参数来解析:代码如下:grep -e '--test--' 文件名
怎么使用 grep 的&或&匹配?使用如下的语法:代码如下:grep -E 'word1|word2' 文件名或代码如下:egrep 'word1|word2' 文件名或者是代码如下:grep 'word1\|word2' 文件名怎么使用 grep 的&和&匹配?使用下面的语法来显示既包含 'word1' 又包含 'word2' 的所有行代码如下:grep 'word1' 文件名 | grep 'word2'怎么样使用序列检测?使用如下的语法,您可以检测一个字符在序列中重复出现次数:代码如下:{N}{N,}{min,max}要匹配字符 &v& 出现两次:代码如下:egrep "v{2}" 文件名下面的命令能匹配到 &col& 和 &cool& :代码如下:egrep 'co{1,2}l' 文件名下面的命令将会匹配出至少有三个 'c' 字符的所有行。代码如下:egrep 'c{3,}' 文件名下面的例子会匹配 91-(即二个数字-十个数字) 这种格式的手机号。代码如下:grep "[[:digit:]]\{2\}[ -]\?[[:digit:]]\{10\}" 文件名
怎么样使 grep 命令高亮显示?使用如下的语法:代码如下:grep --color 正则表达式 文件名怎么样仅仅只显示匹配出的字符,而不是匹配出的行?使用如下语法:代码如下:grep -o 正则表达式 文件名正则表达式限定符
匹配任意的一个字符。
匹配前面的子表达式,最多一次。
匹配前面的子表达式零次或多次。
匹配前面的子表达式一次或多次。
匹配前面的子表达式 N 次。
匹配前面的子表达式 N 次到多次。
匹配前面的子表达式 N 到 M 次,至少 N 次至多 M 次。
只要不是在序列开始、结尾或者序列的结束点上,表示序列范围。
匹配一行开始的空字符串;也表示字符不在要匹配的列表中。
匹配一行末尾的空字符串。
匹配一个单词前后的空字符串。
匹配一个单词中间的空字符串。
匹配单词前面的空字符串。
匹配单词后面的空字符串。
grep 和 egrepegrep 等同于 grep -E 。它会以扩展的正则表达式的模式来解释模式。下面来自 grep 的帮助页:基本的正则表达式元字符 ?、+、 {、 |、 ( 和 ) 已经失去了它们原来的意义,要使用的话用反斜线的版本 \?、\+、\{、\|、\( 和 \) 来代替。 传统的 egrep 并不支持 { 元字符,一些 egrep 的实现是以 \{ 替代的,所以一个可移植的脚本应该避免在 grep -E 使用 { 符号,要匹配字面的 { 应该使用 [}]。GNU grep -E 试图支持传统的用法,如果 { 出在在无效的间隔规范字符串这前,它就会假定 { 不是特殊字符。例如,grep -E '{1' 命令搜索包含 {1 两个字符的串,而不会报出正则表达式语法错误。POSIX.2 标准允许这种操作的扩展,但在可移植脚本文件里应该避免这样使用。
相关搜索:
相关阅读:
相关频道:
&&&&&&&&&&&&&&&&
LINUX系统最近更新

我要回帖

更多关于 grep 正则表达式 转义 的文章

 

随机推荐