sort、uniq、tr、cut、eval以及正则表达式

目录

一、sort命令

1. sort的作用

以行为单位对文件的内容进行排序,也可以根据不同的数据类型来排序。

2. 语法格式

sort [选项] 参数

cat file | sort 选项

3. 常用选项

常用选项 说明
-f 忽略大小写,会将小写字母都转换为大写字母来进行比较
-b 忽略每行前面的空格
-n 按照数字进行排序
-r 反向排序
-u 等同于uniq,表示相同数据仅显示一行
-t 指定字段分隔符,默认使用[Tab]键分割
-k 指定排序字段
-o <输出文件> 将排序后的结果转存至指定文件

4. 使用实例

(1)sort命令

sort排序,首先比较每行第一个不为空的字符,按照空行>数字>字母(小写>大写)的优先级进行排序。若第一个字符相同,将比较第二个不为空的字符,以此类推。

[root@localhost ~]# cat test1.txt
one
two
three
four
five
six
seven
eight
Eight
EIGHT 1
11
12
2
3
4
[root@localhost ~]# sort test1.txt 1
11
12
2
3
4
eight
Eight
EIGHT
five
four
one
seven
six
three
two

(2)-f选项

使用-f选项,使得大写字母优先于小写字母排序。

[root@localhost ~]# sort -f test1.txt

 12
1
11
2
3
4
EIGHT
Eight
eight
five
four
one
seven
six
three
two

(3)-n选项

由于sort命令是按照字符顺序进行比较,无法对数字进行有效排序。当我们需要对数字进行排序时,可使用-n选项。

[root@localhost ~]# sort -n test1.txt

eight
Eight
EIGHT
five
four
one
seven
six
three
two
1
2
3
4
11
12

(4)-r选项

使用-r选项,可以反向排序

[root@localhost ~]# sort -r test1.txt
two
three
six
seven
one
four
five
EIGHT
Eight
eight
4
3
2
12
11
1

(5)-u选项

使用-u选项,去重,将重复行显示为一行。

[root@localhost ~]# cat test2.txt
1
2
100
45
3
333
444
10
145
75
333
444
555
155
666
777
[root@localhost ~]# sort test2.txt
1
10
100
145
155
2
3
333
333
444
444
45
555
666
75
777
[root@localhost ~]# sort -u test2.txt
1
10
100
145
155
2
3
333
444
45
555
666
75
777

(6)-t -k选项

使用-t选项,可指定分隔符;-k选项指定排序列。

可使用“sort -t ':' -k3 -n /etc/passwd”命令对/etc/passwd文件的第三列按照数字大小进行排序。

[root@localhost ~]# sort -t ':' -k3 -n /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
named:x:25:25:Named:/var/named:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
dhcpd:x:177:177:DHCP server:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
gnome-initial-setup:x:991:986::/run/gnome-initial-setup/:/sbin/nologin
sssd:x:992:987:User for sssd:/:/sbin/nologin
geoclue:x:993:988:User for geoclue:/var/lib/geoclue:/sbin/nologin
chrony:x:994:990::/var/lib/chrony:/sbin/nologin
setroubleshoot:x:995:993::/var/lib/setroubleshoot:/sbin/nologin
saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
libstoragemgmt:x:998:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
123456:x:1000:1000:123456:/home/123456:/bin/bash
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

(7)-o选项

-o选项,将排序结果输出到指定文件中

可使用“du -a /var | sort -nr -o var.txt”命令,将var目录中的文件大小进行按照所占大小顺序排序。

需注意的是,-o选项为直接覆盖操作,若需要保留文件内容,建议使用重定向追加。

[root@localhost ~]# du -a /var | sort -nr -o var.txt
[root@localhost ~]# vim var.txt 1028540 /var
587796 /var/cache
584424 /var/cache/yum/x86_64/7
584424 /var/cache/yum/x86_64
584424 /var/cache/yum
274456 /var/spool
274256 /var/spool/abrt
270716 /var/spool/abrt/ccpp-2021-07-01-13:19:58-22790
270412 /var/spool/abrt/ccpp-2021-07-01-13:19:58-22790/coredump
228080 /var/cache/yum/x86_64/7/updates
151324 /var/cache/yum/x86_64/7/base
151028 /var/cache/yum/x86_64/7/epel
142756 /var/cache/yum/x86_64/7/epel/gen
121116 /var/lib
117488 /var/cache/yum/x86_64/7/updates/packages
103524 /var/lib/rpm
101564 /var/cache/yum/x86_64/7/updates/gen
98576 /var/cache/yum/x86_64/7/base/gen
93768 /var/lib/rpm/Packages
82348 /var/cache/yum/x86_64/7/updates/packages/linux-firmware-20200421-80.git78c0348.el7_9.noarch.rpm
74052 /var/cache/yum/x86_64/7/epel/gen/filelists_db.sqlite
49724 /var/cache/yum/x86_64/7/local
48412 /var/cache/yum/x86_64/7/updates/gen/primary_db.sqlite
48056 /var/cache/yum/x86_64/7/base/gen/filelists_db.sqlite
45768 /var/cache/yum/x86_64/7/updates/gen/filelists_db.sqlite
42024 /var/cache/yum/x86_64/7/local/gen
36412 /var/cache/yum/x86_64/7/base/packages
30876 /var/cache/yum/x86_64/7/base/gen/primary_db.sqlite
30284 /var/cache/yum/x86_64/7/epel/gen/primary_db.sqlite
26976 /var/log
18952 /var/cache/yum/x86_64/7/epel/gen/updateinfo.xml
18672 /var/cache/yum/x86_64/7/epel/gen/other_db.sqlite
18500 /var/cache/yum/x86_64/7/local/gen/filelists_db.sqlite
18188 /var/cache/yum/x86_64/7/base/gen/other_db.sqlite
18168 /var/named
18120 /var/named/data
18064 /var/named/data/named.run-20210705
14588 /var/cache/yum/x86_64/7/local/gen/primary_db.sqlite
13872 /var/lib/yum
11848 /var/lib/yum/yumdb
9356 /var/log/messages-20210705
9024 /var/cache/yum/x86_64/7/updates/a053e36a58c0cc4916e18d6b0f3541aa2aaa96507aafc6b0425bb324c7dbfdf1-primary.sqlite.bz2
8232 /var/cache/yum/x86_64/7/updates/packages/kernel-tools-libs-3.10.0-1160.31.1.el7.x86_64.rpm
7464 /var/cache/yum/x86_64/7/local/gen/other_db.sqlite
7384 /var/cache/yum/x86_64/7/updates/gen/other_db.sqlite

二、uniq命令

1. uniq的作用

用于报告或者忽略文件中连续的重复行,常与sort命令结合使用

2. 语法格式

uniq [选项] 参数

cat file | uniq 选项

3. 常用选项

常用选项 说明
-c 进行计数,并删除文件中重复出现的行
-d 仅显示连续的重复行
-u 仅显示出现一次的行

4. 使用实例

(1)uniq命令

对连续的重复行进行去重。

[root@localhost ~]# cat test3.txt
11
22
33
33
33
44
44
55
55
55
22
33
44
44
[root@localhost ~]# uniq test3.txt
11
22
33
44
55
22
33
44

若需要对全部行进行去重,可使用“sort -nu”命令或sort后进行uniq操作。

[root@localhost ~]# sort -nu test3.txt
11
22
33
44
55
[root@localhost ~]# sort -n test3.txt | uniq
11
22
33
44
55

(2)-c选项

使用-c选项,可统计出重复次数并进行去重

[root@localhost ~]# sort -n test3.txt | uniq -c
1 11
2 22
4 33
4 44
3 55

在日常运维中,我们需要对/var/log/secure目录进行计划性监控,以防止黑客的暴力破解。

可以将”grep "Failed password" /var/log/secure | awk '{print $11}' | uniq -c | awk '{print $1}'“该命令写入脚本中,如果该数字大于3次,就将该ip写入/etc/hosts.deny中,并将该脚本写入计划任务crontab中周期性监控。

[root@localhost ~]# grep "Failed password" /var/log/secure
Jul 25 20:54:10 localhost sshd[3512]: Failed password for root from 192.168.122.1 port 63504 ssh2
Jul 25 20:54:15 localhost sshd[3512]: Failed password for root from 192.168.122.1 port 63504 ssh2
Jul 25 20:54:16 localhost sshd[3512]: Failed password for root from 192.168.122.1 port 63504 ssh2
Jul 25 20:54:19 localhost sshd[3512]: Failed password for root from 192.168.122.1 port 63504 ssh2
Jul 25 20:54:22 localhost sshd[3512]: Failed password for root from 192.168.122.1 port 63504 ssh2
[root@localhost ~]# grep "Failed password" /var/log/secure | awk '{print $11}'
192.168.122.1
192.168.122.1
192.168.122.1
192.168.122.1
192.168.122.1
[root@localhost ~]# grep "Failed password" /var/log/secure | awk '{print $11}' | uniq -c
5 192.168.122.1
[root@localhost ~]# grep "Failed password" /var/log/secure | awk '{print $11}' | uniq -c | awk '{print $1}'
5

(3)-d选项

使用-d选项,仅显示连续的重复行

[root@localhost ~]# uniq -d test3.txt
33
44
55
44

若需要显示全部的重复行,可使用“sort -n”命令后进行"uniq -d"操作。

[root@localhost ~]# sort -n test3.txt | uniq -d
22
33
44
55

(4)-u选项

使用-u选项,仅显示不连续的不重复行

[root@localhost ~]# uniq -u test3.txt
11
22
22
33

若需要显示全部的不重复行,可使用“sort -n”命令后进行“uniq -u”操作

[root@localhost ~]# sort -n test3.txt | uniq -u
11

三、tr命令

1. tr的作用

常用来对来自标准输入的字符进行替换、压缩和删除

2. 语法格式

tr [选项] [参数]

参数为所要操作的字符集,使用方式如下:

字符集1:指定要转换或删除的原字符集。当执行转换操作时,必须使用参数“字符集2”指定转换的目标字符集。但执行删除操作时,不需要参数“字符集2”。

字符集2:指定要转换成的目标字符集。

3. 常用选项

常用选项 说明
-c 保留字符集1的字符,其他的字符(包括换行符\n)用字符集2替换
-d 删除所有属于字符集1的字符
-s 将重复出现的字符串压缩为一个字符串;用字符集2替换字符集1
-t 字符集2替换字符集1,不加选项同结果

4. 使用实例

(1)tr命令

tr命令可将字符集1中的字符替换为字符集2中的字符,并且是一一对应的关系,因此前后字符数需相同。

[root@localhost ~]# echo abc | tr "a-z" "A-Z"
ABC
[root@localhost ~]# echo abc | tr "b" "B"
aBc
[root@localhost ~]# echo abc | tr "cb" "BC"
aCB

将$PATH中的分隔符“:”转换为换行输出,使得可以通过列表的方式查看$PATH

[root@localhost ~]# echo $PATH | tr ":" "\n"

(2)-c选项

使用-c选项,可保留字符集1中的字符,其他非字符集1的字符(包括换行符\n)将被替换为字符集2中的字符。

[root@localhost ~]# echo -e "abc\ncabcdab" | tr -c "ab\n" "0"
ab0
0ab00ab
[root@localhost ~]# echo -e "abc\ncabcdab" | tr -c "ab" "0"
ab000ab00ab0[root@localhost ~]#

(3)-d选项

使用-d选项,可删除所有属于字符集1中的字符。

[root@localhost ~]# echo "hello world" | tr -d "ol"
he wrd

(4)-s选项

使用-s选项,可将重复的字符串压缩为一个字符串,也可以使用字符集2,将字符集1的字符替换为字符集2的字符后并进行压缩。

[root@localhost ~]# echo "helllllllllo wooooooorld" | tr -s "ol"
helo world
[root@localhost ~]# echo "helllllllllo wooooooorld" | tr -s "ol" "0"
he0 w0r0d
[root@localhost ~]# echo "helllllllllo wooooooorld" | tr -s "ol" " "
he w r d

也可通过“tr -s “\n””命令压缩空行

[root@localhost ~]# echo -e "aa\n\n\n\n\nbb"
aa bb
[root@localhost ~]# echo -e "aa\n\n\n\n\nbb" |tr -s "\n"
aa
bb

将空格替换为“:”并进行输出,有以下几种方法

[root@localhost ~]# a=`echo -e "aa\n\n\n\n\nbb" |tr -s "\n" ":"`
[root@localhost ~]# echo $a
aa:bb:
[root@localhost ~]# echo ${a:0:5}
aa:bb
[root@localhost ~]# echo ${a%:}
aa:bb

(5)删除Windows文件造成的“^M”字符

Linux中遇到换行符“\n”会进行回车+换行的操作,回车符反而只会作为控制字符“^M”显示,不发生回车的操作。而Windows中要回车符+换行符“\r\n”才会正确的执行回车+换行操作,缺少一个控制符或者顺序不对都不能正确的另起一行。

一般情况下,我们无法察觉是否存在“^M”符号,可通过“cat -v”命令进行查看。

解决“^M”问题,也可以通过dos2unix软件进行修改

[root@localhost ~]# cat abc.txt
aa bb
cc[root@localhost ~]#
[root@localhost ~]# cat -v abc.txt
aa^M
^M
bb^M
cc[root@localhost ~]#

方法一:

直接使用tr命令将“\r” 替换为“ ”,转化后的每行末尾都会有一个空格。

[root@localhost ~]# cat abc.txt | tr "\r" " " > ABC.txt
[root@localhost ~]# cat -v ABC.txt
aa bb
cc[root@localhost ~]#

方法二:

使用“tr -s”命令将“\r”替换为" ",同上。

也可将“ ”换成“\n”,由于连续多个"\n"会被压缩为一个“\n”,因此若存在空行时将只换行一次,导致转换后不存在空行。

[root@localhost ~]# cat abc.txt | tr -s "\r" " " > ABC.txt
[root@localhost ~]# cat -v ABC.txt
aa bb
cc[root@localhost ~]#
[root@localhost ~]# cat abc.txt | tr -s "\r" "\n" > ABC.txt
[root@localhost ~]# cat -v ABC.txt
aa
bb
cc[root@localhost ~]#

方法三:

使用“tr -d”命令删除“\r”,这也是最纯净的转换方式

[root@localhost ~]# cat abc.txt | tr -d "\r" > ABC.txt
[root@localhost ~]# cat -v 123.txt
aa bb
cc[root@localhost ~]#

注:使用“cat”命令时,需替换掉“\r”;当使用的是“cat -v”命令时,应替换“^M”。

(6)将arr=(20 40 30 10 60 50)的数组按大小顺序排列

[root@localhost ~]# arr=(20 40 30 10 60 50)
[root@localhost ~]# echo ${arr[@]}
20 40 30 10 60 50
[root@localhost ~]# echo ${arr[@]} | tr " " "\n"
#将数组中的“ ”替换为“\n”换行符
20
40
30
10
60
50
[root@localhost ~]# echo ${arr[@]} | tr " " "\n" | sort -n
#对数字换行后的数字进行排序
10
20
30
40
50
60
[root@localhost ~]# num=`echo ${arr[@]} | tr " " "\n" | sort -n`
#设置变量num为数组中的数字
[root@localhost ~]# i=0
#设置变量i为数组中的下标,下标起始为0
[root@localhost ~]# for a in $num
> do
> arr[$i]=$a
> echo "下标$i为$a"
> let i++
> done
下标0为10
下标1为20
下标2为30
下标3为40
下标4为50
下标5为60
[root@localhost ~]# echo ${arr[@]}
10 20 30 40 50 60

四、cut命令

1. cut的作用

显示行中的指定部分,删除文件中指定字段

2. 语法格式

cut 选项 参数

cat file | cut 选项

3. 常用选项

常用选项 说明
-b 以字节为单位进行分割
-c 以字符为单位进行分割
-f 通过指定哪一个字段进行提取。cut命令使用“Tab”作为默认的字段分隔符
-d “Tab”是默认的字段分隔符,使用此选项可以更改为其他的分隔符
--complement 此选项用于排除所指定的字段
--output-delimiter 更改输出内容的分隔符

4. 使用实例

(1)-d -f选项

截取指定字段

截取系统中的用户名

[root@localhost ~]# cut -d ':' -f 1 /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
systemd-network
dbus
polkitd
abrt
libstoragemgmt
rpc
colord
saslauth
setroubleshoot
rtkit
pulse
qemu
ntp
radvd
chrony
tss
usbmuxd
geoclue
sssd
gdm
rpcuser
nfsnobody
gnome-initial-setup
avahi
postfix
sshd
tcpdump
123456

以指定条件截取/etc/passwd文件中的第1-4、6、7字段

[root@localhost ~]# grep 'bin/bash' /etc/passwd
root:x:0:0:root:/root:/bin/bash
123456:x:1000:1000:123456:/home/123456:/bin/bash
[root@localhost ~]# grep 'bin/bash' /etc/passwd | cut -d ':' -f 1-4,6,7
root:x:0:0:/root:/bin/bash
123456:x:1000:1000:/home/123456:/bin/bash

截取登录失败信息

[root@localhost ~]# grep "Failed password" /var/log/secure
Jul 25 20:54:10 localhost sshd[3512]: Failed password for root from 192.168.122.1 port 63504 ssh2
Jul 25 20:54:15 localhost sshd[3512]: Failed password for root from 192.168.122.1 port 63504 ssh2
Jul 25 20:54:16 localhost sshd[3512]: Failed password for root from 192.168.122.1 port 63504 ssh2
Jul 25 20:54:19 localhost sshd[3512]: Failed password for root from 192.168.122.1 port 63504 ssh2
Jul 25 20:54:22 localhost sshd[3512]: Failed password for root from 192.168.122.1 port 63504 ssh2
[root@localhost ~]# grep "Failed password" /var/log/secure | cut -d ' ' -f 11
192.168.122.1
192.168.122.1
192.168.122.1
192.168.122.1
192.168.122.1
[root@localhost ~]# grep "Failed password" /var/log/secure | cut -d ' ' -f 11 | uniq -c
5 192.168.122.1
[root@localhost ~]# grep "Failed password" /var/log/secure | cut -d ' ' -f 11 | uniq -c | tr -s " "
5 192.168.122.1
[root@localhost ~]# grep "Failed password" /var/log/secure | cut -d ' ' -f 11 | uniq -c | tr -s " " | cut -d ' ' -f 2
5

(2)--complement -f选项

排除指定字段

[root@localhost ~]# grep 'bin/bash' /etc/passwd | cut -d ':' --complement -f 2
root:0:0:root:/root:/bin/bash
123456:1000:1000:123456:/home/123456:/bin/bash

(3)--output-delimiter选项

更改指定字段的分隔符

[root@localhost ~]# cut -d ':' -f 1,7 --output-delimiter=' ' /etc/passwd
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin
sync /bin/sync
shutdown /sbin/shutdown
halt /sbin/halt
mail /sbin/nologin
operator /sbin/nologin
games /sbin/nologin
ftp /sbin/nologin
nobody /sbin/nologin
systemd-network /sbin/nologin
dbus /sbin/nologin
polkitd /sbin/nologin
abrt /sbin/nologin
libstoragemgmt /sbin/nologin
rpc /sbin/nologin
colord /sbin/nologin
saslauth /sbin/nologin
setroubleshoot /sbin/nologin
rtkit /sbin/nologin
pulse /sbin/nologin
qemu /sbin/nologin
ntp /sbin/nologin
radvd /sbin/nologin
chrony /sbin/nologin
tss /sbin/nologin
usbmuxd /sbin/nologin
geoclue /sbin/nologin
sssd /sbin/nologin
gdm /sbin/nologin
rpcuser /sbin/nologin
nfsnobody /sbin/nologin
gnome-initial-setup /sbin/nologin
avahi /sbin/nologin
postfix /sbin/nologin
sshd /sbin/nologin
tcpdump /sbin/nologin
123456 /bin/bash

(4)-b选项

以字节为单位截取指定字符

[root@localhost ~]# i=1234567890
[root@localhost ~]# echo $i | cut -b 3-6
3456
[root@localhost ~]# echo ${i:2:4}
3456
[root@localhost ~]# expr substr $i 3 4
3456

五、eval命令

1. eval的作用

命令字前加上eval时,shell会在执行命令之前扫描它两次。eval命令将首先会去扫描命令行进行所有的置换,然后再执行该命令。该命令适用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。

2. 使用实例

[root@localhost ~]# echo "hello world" > file
[root@localhost ~]# myfile="cat file"
[root@localhost ~]# echo $myfile
cat file
[root@localhost ~]# eval $myfile
hello world
[root@localhost ~]# vim test.sh
```
#!/bin/bash eval echo \$$#
```
[root@localhost ~]# ./test.sh 1 3 5 7 9
9
[root@localhost ~]# a=100
[root@localhost ~]# b=a
[root@localhost ~]# eval $b=50
[root@localhost ~]# echo $a
50

六、正则表达式

1. 正则表达式的作用

通常用于判断语句中,用来检查某一字符串是否满足某一格式

2. 正则表达式的构成

正则表达式是由普通字符与元字符组成

普通字符包括大小写字母、数字、标点符号及一些其他符号

元字符是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符或表达式)在目标对象中的出现模式

3. 基础正则表达式常见元字符

常用元字符 说明
|转义字符,用于取消特殊符号的含义,例如:\!、\n、\$等
^ 匹配字符串开始的位置,例如:^a、^the、^#、^[a-z]
$ 匹配字符串结束的位置,例如:word$、^$匹配空行
. 匹配除\n之外的任意一个字符,例如:go.d、g..d
* 匹配前面子表达式0次或者多次,例如:goo*d、go.*d
[list] 匹配list列表中的一个字符,例如:go[ola]d、[abc]、[a-z]、[a-z0-9]、[0-9]匹配任意一位数字
[^list] 匹配任意非list列表中的一个字符,例如:[^0-9]、[^A-Z0-9]、[^a-z]匹配任意一位非小写字母
\{n\} 匹配前面的子表达式n次,例如:go\{2\}d、'[0=9]\{2\}'匹配两位数字
\{n,\} 匹配前面的子表达式不少于n次,例如:go\{2,\}d、'[0-9]\{2,\}'匹配两位及两位以上数字
\{n,m\} 匹配前面的子表达式n到m次,例如:go\{2,3\}d、'[0-9]\{2,3\}'匹配两位到三位数字
支持的工具包括:grep、egrep、sed、awk
注:egrep、awk使用\{n\}、\{n,\}、\{n,m\}匹配时“{}”前不用加“\”

4. 扩展正则表达式元字符

常见元字符 说明
+ 匹配前面子表达式1次以上,例如:go+d,将匹配至少一个0,如god、good、goood等
? 匹配前面子表达式0次或者1次,例如:go?d,将匹配gd或god
() 将括号中的字符串作为一个整体,例如:g(oo)+d,将匹配整体1次以上,如good、gooood等
| 以或的方式匹配字符串,例如:g(oo|la)d,将匹配good或者glad
支持的工具包括:egrep、awk

5. 使用实例

匹配邮箱地址,要求:

  1. 用户名@,字符长度在6位及以上,开头只能是字母或者_,中间可使用的符号有.-#_
  2. 子域名,可以是大小写字母,数字,可使用符号.-_
  3. .顶级域名,字符串长度在2-5之间
[root@localhost ~]# vim mailadd.txt
```
zhangsan1234.@qq.com
lisi_3456@sina.com.cn
wang wu@163.com
zhao@liu@wo.cn
sun@qi.com
```
[root@localhost ~]# egrep '^([a-zA-Z_][a-zA-Z0-9_#\-\.]{5,})@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}$)' mailadd.txt
zhangsan1234.@qq.com
lisi_3456@sina.com.cn

最新文章

  1. iOS CALayer应用详解
  2. java动手动脑和课后实验型问题String类型
  3. 多线程下C#如何保证线程安全?
  4. date
  5. BZOJ1915: [Usaco2010 Open]奶牛的跳格子游戏
  6. java 字节数组转int
  7. vc 中调用COM组件的方法
  8. CSS对浏览器的兼容性(IE和Firefox)技巧整理
  9. HDU 1027 Ignatius and the Princess II(康托逆展开)
  10. Android之帧动画
  11. 关于PKCS5Padding与PKCS7Padding的区别
  12. java设计模式--结构型模式--桥接模式
  13. eclipse中删除多余的工作空间记录
  14. 用VLC搭建流媒体server
  15. POJ 1922 Ride to School#贪心
  16. viewPager的切换动画
  17. [ABP框架]动态web Api的拦截用法。
  18. 逆向实战干货,快速定位自动捡阳光Call,或者标志
  19. 阿里云API网关(16)客户端请求的https支持
  20. WebApiClient的接口输入验证

热门文章

  1. Kerberos认证过程学习理解
  2. Swoole 中使用 WebSocket 异步服务器、WebSocket 协程服务器
  3. PHP DateTime类常用方法总结
  4. linux 之 误删openssl文件夹重装openssl
  5. linux tomcat【9.0.12】 使用 ssl证书 配置 https 的具体操作 【使用 域名 】
  6. Hadoop学习-块、网络拓扑、副本策略、机架感知
  7. 51 Nod 1091 线段的重叠 (贪心算法)
  8. 【记录一个问题】运算迁移到gpu后的计时问题
  9. Cesium入门3 - Cesium目录框架结构
  10. pytest文档6-allure-pytest