https://www.jianshu.com/p/954fa5eaf0fd
简单的说,正则表达式就是处理字串的方法,他是以行为单位来进行字串的处理行为, 正则表达式通过一些特殊符号的辅助,可以让使用者轻易的达到“搜寻/删除/取代”某特定字串的处理程序!
正则表达式基本上是一种“表达式”, 只要工具程序支持这种表达式,那么该工具程序就可以用来作为正则表达式的字串处理之用。 例如 vi, grep, awk ,sed 等等工具,因为她们有支持正则表达式, 所以,这些工具就可以使用正则表达式的特殊字符来进行字串的处理。但例如 cp, ls 等指令并未支持正则表达式, 所以就只能使用 bash 自己本身的通配符字符而已。
是 Linux 基础当中的基础,虽然也是最难的部分, 不过,如果学成了之后,一定是“大大的有帮助”的!这就好像是金庸小说里面的学武难关:任督二脉! 打通任督二脉之后,武功立刻成倍成长!
正则表达式元字符:
===基本正则表达式元字符
元字符 功能 示例
===================================================================================
^ 行首定位符 ^love grep '^root' /etc/passwd
$ 行尾定位符 love$ grep 'root$' /etc/passwd
. 匹配单个字符 l..e grep '^r..t' /etc/passwd
* 匹配前导符0到多次 ab*love grep 'ro*t' /etc/passwd
.* 任意多个字符 grep 'r*ot' /etc/passwd grep 'r**t' /etc/passwd
[] 匹配指定范围内的一个字符 [lL]ove grep '[rx]oot' /etc/passwd
[ - ] 匹配指定范围内的一个 [a-z0-9]ove grep '[a-z0-9]oot' /etc/passwd [0-9]、[a-z]、[A-Z] 是范围。
[^] 匹配不在指定组内的字符 [^a-z0-9]ove grep '[^a-z0-9]oot' /etc/passwd
^ 符号,在字符类符号(括号[])之内与之外是不同的! 在 [] 内代表『反向选择』,在 [] 之外则代表定位在行首的意义! 重点!!!
\ 用来转义元字符 love\.
\< 词首定位符 \<love 无用
\> 词尾定位符 love\> 无用
\(..\) 匹配稍后使用的字符的标签 :%s/172.16.130.1/172.16.130.5/
:% s/\(172.16.130.\)1/\15/
:% s/\(172.\)\(16.\)\(130.\)1/\1\2\35/
:3,9 s/\(.*\)/#\1/
x\{m\} 字符x重复出现m次 o\{5\}
x\{m,\} 字符x重复出现m次以上 o\{5,\}
x\{m,n\} 字符x重复出现m到n次 o\{5,10\}
===扩展正则表达式元字符 egrep 或 grep -E
+ 匹配一个或多个前导字符 [a-z]+ove
? 匹配零个或一个前导字符 lo?ve
a|b 匹配a或b love|hate
() 组字符 loveable|rs love(able|rs) ov+ ov+ (ov)+
(..)(..)\1\2 标签匹配字符 (love)able\1er
POSIX字符类:
image尤其要记住:
[:alnum] 代表所以的大小写英文字符和数字 0-9 A-Z a-z
[:alpha:] 代表任意英文大小写字符 A-Z a-z
[:lower:] 代表小写字符 a-z
[:upper:] 代表大写字符 A-Z
[:digit:] 代表数字 0-9
网友评论