查找中间是字母的用户
[[email protected] ~]# grep "u[[:alpha:]][[:alpha:]]r" /etc/passwd
saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
user1:x:505:505::/home/user1:/bin/bash
user2:x:506:506::/home/user2:/bin/bash
[[email protected] ~]# grep "u[[:alpha:]][[:alpha:]]r" /etc/passwd
saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
user1:x:505:505::/home/user1:/bin/bash
user2:x:506:506::/home/user2:/bin/bash
[[email protected] ~]#
基本正则表达式元字符:
字符匹配:
.:匹配任意单个字符
[]:匹配指定范围內的任意单个字符
[^]:匹配指定范围外的任意单个字符
[:digit:]、[:lower:]、[:upper:]、[:alpha:]、[:punct:]、[:space:]
匹配次数:用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数;默认工作于贪婪模式;
*:匹配其前面的字符任意次;0,1,多次
例如:grep "x*y"
abxy
aby
xxxxxy
yab
.*:匹配任意长度的任意字符
\?:匹配其前面的字符0次或者1次;即其前面的字符是可有可无的;
\+:匹配其前面的字符1次或者多次;即其前面的字符至少要出现一次;
\{m\}:匹配前面字符m次;
\{m,n\}:匹配其前面的字符至少m次,至多n次;
\{0,n\}:至多匹配n次
\{m,\}:至少m次
位置锚定:
^:行首锚定;用于模式的最左侧;
$:行尾锚定;用于模式的最右侧;
^word$:用word匹配整行
^$:空白行
^[[:space:]]*$:表示只能出现空白行,space可以出现任意次,不管有没有如果有也只能出现空白;即空白行或者包含空白字符的行
单词:非特殊字符祖册的连续字符(字符串)都称为单词;
\<或者\b:词首锚定,用于单词模式的左侧;
\>或者\b:词尾锚定,用于单词模式的右侧;
\<word\>:精确匹配完整单词
\<word\>:精确锚定单词
\<word左侧锚定单词
word\>右侧锚定单词
分组及引用
\(\):将一个或多个字符捆绑在一起,当做一个整体进行处理;
\(xy\)*ab:将xy当做一个整体来处理
提示:分组括号中的模式匹配到的内容会被正则表达式引擎自动记录与内部的变量中,这些变量为:
\1:模式从左侧其,第一个左括号以及与之匹配的右侧括号之间的模式所匹配的字符;
\2:模式从左侧其,第二个左括号以及与之匹配的右侧括号之间的模式所匹配的字符;
\3:模式从左侧其,第三个左括号以及与之匹配的右侧括号之间的模式所匹配的字符;
行首和行中间都出现r..t的字符窜,即grep的后向引用;引用前面的分组括号中的模式所匹配到的字符
[[email protected] ~]# grep "^\(r..t\).*\1" /etc/passwd
root:x:0:0:root:/root:/bin/bash
[[email protected] ~]#
egrep:
支持扩展的正则表达式实现类似于grep文本过滤功能:grep -E
生成补丁
diff oldfile newfile >patchfile
-u:使用unfiled机制,即显示要修改文件的上下文,默认为3行
patch:向文件打补丁
path [option] -i patchfile oldfile
或者
patch oldfile < patchfile