正则表达式入门 - shell
note:
学习 shell 时候,正好书中有此一节,记录一些有用的基础知识
man re_format
命令可以查看正则表达式手册
正则是什么
正则表达式是一个字符串,字符串里面的字符被称为元字符,通过元字符的组合来表达比字面上更丰富的含义。
正则表达式就是元字符组合成的字符集,用来匹配(或指定)一个模式
正则表达式内容包含:
- 一个字符集:字符集就是表示字面意思,最简单的正则表达式只有字符集表示,没有其他元字符
- 锚:一个锚指定了正则表达式在一行文本中要匹配的位置。如
^
或$
就是锚 - 修饰符:它们用于展开或缩小正则表达式匹配文本行的范围,如
*
,()
,[]
,\
正则表达式的主要作用就是用来文本搜索和字符串操作,一个正则表达式匹配一个字符或一串字符。
特殊符号
*
匹配前一个字符任意多次,包括0次
"1133*"匹配11 + 一个或更多的3 + 可能的其他字符: 113, 1133, 111312, 等等.
.
匹配除了新行符之外的任意一个字符(有且只有一个)
"1133."匹配1133后面添加任意一个字符,如 11334、1133a、1133,等等.
^
匹配一行的开头,
在[^a-c]
这种结构中表示否定a-c字符集的意思
$
匹配行尾
^$
匹配空行
方括号 [...]
表示匹配括号中的一个字符
"[xyz]" 匹配字符x, y, 或z.
"[c-n]" 匹配从字符c到n之间的任意一个字符.
"[B-Pk-y]" 匹配从B到P 或从k到y的任意一个字符.
"[a-z0-9]" 匹配任意小写字母或数字.
"[^b-d]" 匹配除了从b到d范围内所有的字符. 这是正则表达式中反转意思或取否的一个例子。(就好像在别的情形中!字符所扮演的角色).
多个方括号字符集组合使用可以匹配一般的单词和数字模式。"[Yy][Ee][Ss]" 匹配yes, Yes, YES, yEs, 等等. "[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]" 匹配社会安全码(Social Security number).
反斜杠字符 \
转义一个特殊的字符,使这个字符表示原来字面上的意思.
"$"表示了原来的字面意思"$",而不是在正则表达式中表达的匹配行尾的意思.同样,"\"也被解释成了字面上的意思"".
转义"尖角号" \<...\>
用于表示单词的边界.
尖角号必须被转义,因为不这样做的话它们就表示单纯的字面意思而已.
"<the>" 匹配单词"the",但不匹配"them", "there", "other", 等等.
扩展正则表达式,增加一些元字符到上面提到的基本元字符集合中
-
?
用来匹配0个或1个前面的字符。匹配至多一个单字符 -
+
用来匹配一个或多个前面字符,和*
类似,但是不匹配0个字符的情况 -
转义”大括号“
\{\}
表示前面正则表达式要匹配的次数
要转义是因为不转义的话大括号只是表示他们字面上的意思。这个用法只是技巧上的而不是基本正则表达式的内容。
"[0-9]{5}" 精确匹配5个数字 (从 0 到 9的数字).
- 圆括号
()
括起一组正则表达式,它和|
在用 expr 进行字符串提取时候很有用 - 竖线
|
”或“正则操作符用于匹配一组可选的字符
egrep 're(a|e)d' misc.txt
People who read seem to be better informed than those who do not.
The clarinet produces sound by the vibration of its reed.
小结
本文整理了正则表达式的一些基础内容,后面仍旧需要实践中更多的练习来加强!
-- end