linux系统——shell编程文本处理三剑客之正则表达式
- awk —— 切片
- sed —— 更改
- grep —— 筛选
同时正则表达式作为辅助工具
- 正则表达式
正则示例:
#!/bin/bash
read -p "几个? " aaa
if [[ ! $aaa =~ ^[0-9]+$ ]] \\判断运用正则表达式,判断输入的是否为0-9开头 +一个到多个
then
echo cuowu
exit 90
else
for i in `seq $aaa`
do
useradd user$i
done
fi
执行结果:
[root@slave2 ~]# bash zheng1.sh
几个? 2
useradd: user 'user1' already exists
useradd: user 'user2' already exists
- 定义:
元字符是这样一类字符,它们表达的是不同于字面本身的含义
- 基本正则表达式元字符
- 扩展正则表达式元字符
- 基本正则表达式元字符:
^ —— 行首定位符 —— ^接什么表示以什么开头:
[root@slave2 ~]# cat 2.txt
love you
iove
i love you
1oveyou
[root@slave2 ~]# grep "^l" 2.txt
love you
$ —— 行尾定位符 —— 什么接$表示以什么结尾:
[root@slave2 ~]# cat 2.txt
love you
iove
i love you
1oveyou
[root@slave2 ~]# grep "you$" 2.txt
love you
i love you
1oveyou
. —— 任意一个字符:
[root@slave2 ~]# cat 3.txt
a
ab
abc
abcd
abcde
abcdef
[root@slave2 ~]# grep "a.c" 3.txt
abc
abcd
abcde
abcdef
* —— 匹配前导符0-多次 —— *前一个字符有0-多个:
[root@slave2 ~]# cat 3.txt
a
ab
abc
abcd
abcde
abcdef
[root@slave2 ~]# grep "abc" 3.txt
abc
abcd
abcde
abcdef
[root@slave2 ~]# grep "abc*" 3.txt
ab
abc
abcd
abcde
abcdef
这里插入代码片
.* —— 匹配任意多个字符 —— . 和* 的组合:
[root@slave2 ~]# cat 3.txt
a
ab
abc
abcd
abcde
abcdef
[root@slave2 ~]# grep ".*" 3.txt
a
ab
abc
abcd
abcde
abcdef
[ ] —— 匹配范围内任一字符:
[root@slave2 ~]# cat 3.txt
a
ab
abc
abcd
abcde
abcdef
[root@slave2 ~]# grep "[ef]" 3.txt
abcde
abcdef
[ - ] —— 匹配范围内任一字符,范围连续:
[root@slave2 ~]# cat 3.txt
a
ab
abc
abcd
abcde
abcdef
[root@slave2 ~]# grep "[d-f]" 3.txt
abcd
abcde
abcdef
[ ^ ] —— 匹配不在指定组内的字符 —— 取反:
[root@slave2 ~]# cat 3.txt
a
ab
abc
abcd
abcde
abcdef
[root@slave2 ~]# grep "[d-f]" 3.txt
abcd
abcde
abcdef
[root@slave2 ~]# grep "[^d-f]" 3.txt
a
ab
abc
abcd
abcde
abcdef
\ —— 脱意符:
[root@slave2 ~]# grep "l.ve" 2.txt
love you
i love you
l.ve
[root@slave2 ~]# grep "l\.ve" 2.txt
l.ve
\< —— 词首定位符:
[root@slave2 ~]# cat 2.txt
love you
iove
i love you
1oveyou
l.ve
[root@slave2 ~]# grep "\<lo" 2.txt
love you
i love you
[root@slave2 ~]# grep "^lo" 2.txt
love you
\> —— 词尾定位符:
[root@slave2 ~]# cat 2.txt
love you
iove
i love you
1oveyou
l.ve
[root@slave2 ~]# grep "\>ve" 2.txt
[root@slave2 ~]# grep "ve$" 2.txt
iove
l.ve