linux系统——shell编程文本处理三剑客之正则表达式

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 "\
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

你可能感兴趣的:(笔记,shell,正则表达式)