LINUX学习之正则表达式(十二)
普通正则
元字符
元字符 | 匹配描述 |
---|---|
. |
匹配除了换行符以外的任意单个字符 |
* |
前导字符出现0次或连续多次 |
.* |
任意长度字符 |
^ |
行首(以…开头) |
` | 元字符 |
------ | ------------------------------------------ |
. |
匹配除了换行符以外的任意单个字符 |
* |
前导字符出现0次或连续多次 |
.* |
任意长度字符 |
^ |
行首(以…开头) |
| 行尾(以…结尾) |
| ^| 元字符 | 匹配描述 | | ------ | ------------------------------------------ | |
. | 匹配除了换行符以外的任意单个字符 | |
| 前导字符出现0次或连续多次 | |
. | 任意长度字符 | |
^ | 行首(以…开头) | | 空行 | |
[] | 匹配括号里任意单个字符或一组单个字符 | |
[^] | 匹配不包含括号里任一单个字符或一组单个字符 | |
[1] | 匹配以括号里任意单个字符或一组单个字符开头 | |
[]| 匹配非括号里任意单个字符或一组单个字符开头 | |
< | 取单词的头 | |
> | 取单词的尾 | |
< >` | 精确匹配 |
实例演示
创建test.txt文件用于正则匹配操作, 文件内容如下:
ggle
gogle
google
gooogle
goooooogle
gooooooogle
taobao.com
taotaobaobao.com
jingdong.com
dingdingdongdong.com
10.1.1.1
Adfjd8789JHfdsdf/
a87fdjfkdLKJK
7kdjfd989KJK;
bSKJjkksdjf878.
cidufKJHJ6576,
hello world
helloworld yourself
**1.匹配包含'go'的字符串: `grep 'go' test.txt`**
**2.匹配以'g'开头的字符串: `grep '^g' test.txt`**
**3.匹配以'g'开头,后接一个任意字符的字符串:`grep '^g.' test.txt`**
**4.匹配以'g'开头,后接多个任意字符的字符串: `grep '^g.*' test.txt`**
**5.匹配所有字符: `grep '.*' test.txt`**
**6.匹配以'gle'结尾的字符串: `grep 'gle$' test.txt`**
7.匹配以'gle'结尾的所有字符串: grep '.*gle$' test.txt
**8.匹配以字符'a','b','c'开头的字符串: `grep '^[abc]' test.txt` **
**9.匹配非字符'a','b','c'开头的字符串: `grep '^[^abc]' test.txt`**
**10.匹配含有字符'a','b','c'的字符串: `grep '[abc]' test.txt`**
扩展正则
扩展元字符
扩展元字符(需用grep -E 或egrep ) |
功能 |
---|---|
+ | 匹配一个或多个前导字符 |
? | 匹配零个或一个前导字符 |
| | 或 |
() | 将字符组合成一个整体 |
前导字符重复n次 | |
前导字符重复至少n次 | |
前导字符重复n到m次 |
扩展元字符(需用grep -P ) |
功能 |
---|---|
\d | 匹配数字, 等价于[0-9] |
\w | 匹配字母数字下划线, 等价于[a-zA-Z0-9_] |
\s | 匹配空格、制表符、换页符, 等价于[\t\r\n] |
实例演示
1.grep -E 'o+gle' test.txt
**2. `grep -E 'o?gle' test.txt`**
**3.匹配前导字符‘o’至少出现两次的字符串: `grep -E 'go{2,}' test.txt` **
**4.匹配前导字符'tao'至少出现两次的字符串: `grep -E '(tao){2,}' test.txt`**
**5.匹配包含'hello'或'jingdong'的字符串:`grep -E '(hello|jingdong)' test.txt`**
**6.匹配IP格式的字符串: `grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}.[0-9]{1,3}' test.txt` 或 `grep -P '(\d){1,3}\.(\d){1,3}\.(\d){1,3}.(\d){1,3}' test.txt`**
此处要注意对特殊字符的转义, 例如这里就对
.
使用了转义符号