Linux学习之十grep及正则表达式(grep)
2017-05-09 15:55
666 查看
一、文本查找的需要:
grep,egrep,fgrep
1、grep:根据模式搜索文本,并将符合模式的文本行显示出来
Pattern(模式):文本字符和正则表达式的元字符组合而成匹配条件
grep [options] PATTERN [FILE...]
例:[root@Ourlab ~]# grep 'root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
-i:忽略大小写
--colour:匹配的字符或字符串加颜色
例:[root@Ourlab ~]# grep --colour 'root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
-v:显示没有被匹配的行
-o:只显示被匹配的字符串,且以行显示
例:[root@Ourlab ~]# grep -o 'root' /etc/passwd
root
root
root
root
2、通配符:
*:任意长度的任意字符
?:任意单个字符
[]:任意范围内的字符
[^]:任意范围外字符
3、正则表达式:Regular EXPression(REGEXP)
元字符:
.:匹配任意单个字符
例:[root@Ourlab ~]# grep 'r..t' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
字符集合:[:digit:]数字,[:lower:]小写字母,[:upper:]大写字母,[:punct:]标点符号,[:space:]空格,[:alpha:]所有字母,[:alnum:]所有字母和数字
例:显示/etc/inittab中以数字结尾的行
[root@Ourlab ~]# grep '[[:digit:]]$' /etc/inittab
# 5 - X11
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
字符次数:
*:匹配其前面的字符任意次
例:创建一个文件test.txt,内容为:a,b,ab,aab,acb,adb,amnb,amnbmnb,使用“a*b”进行匹配显示的字符如下:
[root@Ourlab ~]# grep 'a*b' test.txt
b
ab
aab
acb
adb
amnb
amnbmnb
.*:匹配任意长度的任意字符
例:[root@Ourlab ~]# grep 'a.*b' test.txt
ab
aab
acb
adb
amnb
amnbmnb
\?:匹配其前面的字符1次或0次(使用时需要加转义符\)
例:[root@Ourlab ~]# grep 'a\?b' test.txt
b
ab
aab
acb
adb
amnb
amnbmnb
\{m,n\}:匹配其前面的字符至少m次,至多n次
例:[root@Ourlab ~]# grep 'a\{1,3\}b' test.txt
ab
aab
位置锚定:
^:锚钉行首,此字符后面的任意内容必须出现在行首
例:[root@Ourlab ~]# grep '^r..t' /etc/passwd
root:x:0:0:root:/root:/bin/bash
$:锚钉行尾,此字符前面的任意内容必须出现在行尾
例:[root@Ourlab ~]# grep 'w$' /etc/inittab
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
^$:空白行
例:[root@Ourlab ~]# grep '^$' /etc/inittab
\<或\b:锚钉词首,其后面的任意字符必须作为单词的首部出现
\>或\b:锚钉词尾,其前面的任意字符必须做为单词的尾部出现
\<\>或\b\b:其指定的字符必须作为单词出现
例:创建一个文件test2.txt,内容:This is root.The user is mroot.rooter is a dog's name.chroot is a command.mrooter is not a word.
例1:[root@Ourlab ~]# grep "root\>" test2.txt
This is root.
The user is mroot.
chroot is a command.
分组:
\(\):用于后向引用
例:\(ab\)*:ab作为一组同时出现或不出现
[root@Ourlab ~]# grep --colour "\(ab\)" test.txt
ab
aab
\1:引用第一个左括号以及与之对应的右括号所包含的所有内容
\2:引用第二个左括号以及与之对应的右括号所包含的所有内容
例:创建一个文件test3.txt文件内容如下:
He love his lover.
She like her lover.
He like his liker.
She love her liker.
She like him.
例1:使用后引用方法查找test3.txt文件相关出现”l..e“单词并以该单词结尾的行;
[root@Ourlab ~]# grep '\(l..e\).*\1' test3.txt
He love his lover.
He like his liker.
课后练习:
1、分析/etc/inittab文件中如下文本中前两行的特征(每一行中出现在数字必须相同),请写出可以精确找到类似两行的模式:
l1:1:wait:/etc/rc.d/rc 1
l3:3:wait:/etc/rc.d/rc 3
[root@Ourlab ~]# grep '^l\([0-9]\):\1.*\1$' /etc/inittab
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
grep,egrep,fgrep
1、grep:根据模式搜索文本,并将符合模式的文本行显示出来
Pattern(模式):文本字符和正则表达式的元字符组合而成匹配条件
grep [options] PATTERN [FILE...]
例:[root@Ourlab ~]# grep 'root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
-i:忽略大小写
--colour:匹配的字符或字符串加颜色
例:[root@Ourlab ~]# grep --colour 'root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
-v:显示没有被匹配的行
-o:只显示被匹配的字符串,且以行显示
例:[root@Ourlab ~]# grep -o 'root' /etc/passwd
root
root
root
root
2、通配符:
*:任意长度的任意字符
?:任意单个字符
[]:任意范围内的字符
[^]:任意范围外字符
3、正则表达式:Regular EXPression(REGEXP)
元字符:
.:匹配任意单个字符
例:[root@Ourlab ~]# grep 'r..t' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
字符集合:[:digit:]数字,[:lower:]小写字母,[:upper:]大写字母,[:punct:]标点符号,[:space:]空格,[:alpha:]所有字母,[:alnum:]所有字母和数字
例:显示/etc/inittab中以数字结尾的行
[root@Ourlab ~]# grep '[[:digit:]]$' /etc/inittab
# 5 - X11
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
字符次数:
*:匹配其前面的字符任意次
例:创建一个文件test.txt,内容为:a,b,ab,aab,acb,adb,amnb,amnbmnb,使用“a*b”进行匹配显示的字符如下:
[root@Ourlab ~]# grep 'a*b' test.txt
b
ab
aab
acb
adb
amnb
amnbmnb
.*:匹配任意长度的任意字符
例:[root@Ourlab ~]# grep 'a.*b' test.txt
ab
aab
acb
adb
amnb
amnbmnb
\?:匹配其前面的字符1次或0次(使用时需要加转义符\)
例:[root@Ourlab ~]# grep 'a\?b' test.txt
b
ab
aab
acb
adb
amnb
amnbmnb
\{m,n\}:匹配其前面的字符至少m次,至多n次
例:[root@Ourlab ~]# grep 'a\{1,3\}b' test.txt
ab
aab
位置锚定:
^:锚钉行首,此字符后面的任意内容必须出现在行首
例:[root@Ourlab ~]# grep '^r..t' /etc/passwd
root:x:0:0:root:/root:/bin/bash
$:锚钉行尾,此字符前面的任意内容必须出现在行尾
例:[root@Ourlab ~]# grep 'w$' /etc/inittab
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
^$:空白行
例:[root@Ourlab ~]# grep '^$' /etc/inittab
\<或\b:锚钉词首,其后面的任意字符必须作为单词的首部出现
\>或\b:锚钉词尾,其前面的任意字符必须做为单词的尾部出现
\<\>或\b\b:其指定的字符必须作为单词出现
例:创建一个文件test2.txt,内容:This is root.The user is mroot.rooter is a dog's name.chroot is a command.mrooter is not a word.
例1:[root@Ourlab ~]# grep "root\>" test2.txt
This is root.
The user is mroot.
chroot is a command.
分组:
\(\):用于后向引用
例:\(ab\)*:ab作为一组同时出现或不出现
[root@Ourlab ~]# grep --colour "\(ab\)" test.txt
ab
aab
\1:引用第一个左括号以及与之对应的右括号所包含的所有内容
\2:引用第二个左括号以及与之对应的右括号所包含的所有内容
例:创建一个文件test3.txt文件内容如下:
He love his lover.
She like her lover.
He like his liker.
She love her liker.
She like him.
例1:使用后引用方法查找test3.txt文件相关出现”l..e“单词并以该单词结尾的行;
[root@Ourlab ~]# grep '\(l..e\).*\1' test3.txt
He love his lover.
He like his liker.
课后练习:
1、分析/etc/inittab文件中如下文本中前两行的特征(每一行中出现在数字必须相同),请写出可以精确找到类似两行的模式:
l1:1:wait:/etc/rc.d/rc 1
l3:3:wait:/etc/rc.d/rc 3
[root@Ourlab ~]# grep '^l\([0-9]\):\1.*\1$' /etc/inittab
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
相关文章推荐
- Linux grep命令与正则表达式学习
- Linux学习----grep及正则表达式
- linux学习---正则表达式与grep
- linux学习笔记: grep命令,正则表达式
- Linux学习笔记:grep及正则表达式
- Linux学习日记--基础命令(6)--grep及正则表达式
- linux学习之grep egrep 命令及正则表达式
- linux基础学习-第七天(正则表达式及grep)
- Linux脚本学习_grep及正则表达式
- Vbird的Linux私房菜学习笔记之正则表达式-grep
- Linux学习-grep与正则表达式使用方法
- Linux基础知识之正则表达式、grep、egrep的用法
- linux学习日记九 正则表达式介绍
- Linux正则表达式详解_GREP
- Linux 正则表达式 vi, grep, sed, awk
- 【学习笔记——Linux】Linux正则表达式和文件格式化处理
- linux正则表达式 grep egrep用法
- Linux学习(六)-----正则表达式
- 在Linux下正则表达式和grep命令的使用
- 【linux】——Linux学习之正则表达式