正则表达式(awk、sort 、uniq 、tr 工具)

扩展正则表达式

1、awk工具

awk 选项 ‘模式或条件{编辑命令}’ 文件1 文件2…. //过滤并输出文件中符合条件的内容
awk -f 脚本文件 文件1 文件2… //从脚本中调用的编辑指令,过滤并输出内容

awk包含几个特殊的内建变量(可直接用)如下所示:

FS:指定每行文本的字段分隔符,默认为空格或制表位;
NF:当前处理的行的字段个数;
NR:当前处理的行的行号(序数);
$0:当前处理的行的整行内容;
$n:当前处理的行的第n个字段(第n列); FILENAME:被处理的文件名;
RS:数据记录分隔,默认为\n,即每行为一条记录。

1、按行输出文本

输出所有内容,等同于cat test.txt

awk ‘{print}’ test.txt

输出所有内容,等同于cat test.txt

awk ‘{print $0}’ test.txt

输出第1~3行内容

awk ‘NR1,NR3{print}’ test.txt

输出第1~3行内容

awk ‘(NR>=1)&&(NR<=3){print}’ test.txt

输出第1行,第3行的内容

awk ‘NR1||NR3{print}’ test.txt

输出所有奇数行的内容

awk ‘(NR%2)==1{print}’ test.txt

输出所有偶数行的内容

awk ‘(NR%2)==0{print}’ test.txt

输出以root开头的行

awk ‘/^root/{print}’ /etc/passwd

输出以nologin结尾的行

awk ‘/nologin$/{print}’ /etc/passwd

统计以/bin/bash结尾的行数,等同于grep –c “/bin/bash$” /etc/passwd

awk ‘BEGIN {x=0};//bin/bash$/{x++};END {print x}’ /etc/passwd

5.1.11统计以空行分隔的文本段落数
awk ‘BEGIN {RS=””} ;END{print NR}’ test.txt

2、按字段输出文本

输出每行中(以空格或制表符分隔)的第三个字段

awk ‘{print $3}’ test.txt

输出每行中第1,3个字段

awk ‘{print $1,$3}’ test.txt

输出密码为空的用户的shadow记录

awk -F ”:” ‘$2==””{print}’ /etc/shadow

输出密码为空的用户的shadow记录

awk ‘BEGIN {FS=”:”} ; $2==””{print}’ /etc/shadow

输出以冒号分隔且第7个字段中包含/bash的行的第一个字段

awk -F ”:” ‘$7~”/bash”{print $1}’ /etc/shadow

输出包含8个字段且第一个字段中包含nfs的行的第1,2个字段

awk ‘($1~”nfs”)&&(NF==8){print $1,$2}’ /etc/services

输出第七个字段既不为/bin/bash也不为/sbin/nologin的所有行

awk -F “:” ‘($7 != “/bin/bash”)&&($7 != “/sbin/nologin”){print}’
/etc/passwd

3、通过管道、双引号调用Shell命令

调用wc –l命令统计使用bash的用户的个数,等同于grep –c “bash$ ”

/etc/passwd
awk -F: ‘/bash $/{print | “wc -l”}’ /etc/passwd

调用w命令,并用来统计在线用户数

awk ‘BEGIN {while (“w” | getline) n++ ; {print n-2}}’

调用hostname,并输出当前主机名

awk ‘BEGIN {“hostname” | getline ; print $0}’

2、sort工具

sort是一种以行为单位对文件内容进行排序的工具,也可以根据不同的数据类型来排序

用法:sort命令的语法为“sort [选项] 参数”,

其中常用的选项包括一下几种

选项作用
-f:忽略大小写
-b:忽略每行前面的空格
-M:按照月份进行排序
-n:按照数字进行排序
-r:反向排序
-u:等同于uniq,表示相同的数据仅显示一份
-t:指定分隔符,默认使用[TAB]键分隔
-o<输出文件>:将排序后的结果转存至指定文件
-k:指定排序区域

将/etc/passwd 文件中的账号进行排序,默认是按首字母顺序排序

[root@localhost ~]# sort /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
lisi:x:1002:1002::/home/lisi:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
shi:x:1000:1000:shi:/home/shi:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
vuser:x:1003:1003::/opt/vuser:/sbin/nologin
zhangsan:x:1001:1001::/home/zhangsan:/bin/bash

第三列是数字,倒序排列


[root@localhost ~]# sort -t ':' -rk 3 /etc/passwd 
nobody:x:99:99:Nobody:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sync:x:5:0:sync:/sbin:/bin/sync
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
vuser:x:1003:1003::/opt/vuser:/sbin/nologin
lisi:x:1002:1002::/home/lisi:/bin/bash
zhangsan:x:1001:1001::/home/zhangsan:/bin/bash
shi:x:1000:1000:shi:/home/shi:/bin/bash
root:x:0:0:root:/root:/bin/bash

3、uniq工具

uniq工具在Linux系统中通常与sort命令结合使用,用于报告或者忽略文件中的重复行
-c:进行计数;
-d:仅显示重复行;
-u:仅显示出现一次的行

实验用文档
[root@localhost ~]# vim shiyan.txt 
1
2
3
4
5
6
7
8
9
10
10
10
aaa
aaa
bbb

在这里插入图片描述

查找文件中重复的行
[root@localhost ~]# uniq -d shiyan.txt 
10
aaa

4、tr工具

tr命令常用来对来自标准输入的字符进行替换、压缩和删除
tr具体的命令语法格式为:tr [选项] [参数]
-c:取代所有不属于第一字符集的字符;
-d:删除所有属于第一字符集的字符;
-s:把连续重复的字符以单独一个字符表示;
-t:先删除第一字符集较第二字符集多出的字符,做替换

1.将大写字母转换成小写字母

[root@localhost ~]# echo "HELLO"|tr 'A-Z' 'a-z'
hello

2.压缩输入中重复的字符

[root@localhost ~]# echo "thiiiiiiiiiiiiiis is meeeeee" | tr -s 'ie'
this is me

3.删除字符串中的某些字符

[root@localhost ~]# echo 'hello world'| tr -d 'wod'
hell rl

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值