linux正则匹配多个空行,Shell脚本正则表达式之——awk、sort、uniq,内含多个小Demo...

awk工具

在Linux/UNIX系统中,awk是一个功能强大的编辑工具,逐行读取输入文本,并根据指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理,可以再无交互的情况下实现相当复杂的文本操作,被广泛应用于Shell脚本,完成各种自动化配置任务。

1.awk常见用法:

通常情况下 awk 所使用的命令格式如下所示,其中,单引号加上大括号“{}”用于设置对数据进行的处理动作。awk 可以直接处理目标文件,也可以通过“-f”读取脚本对目标文件进行处理。

Demo1:

查出/etc/passwd的用户名等列,执行如下命令

[root@localhost ~]# awk -F ':' '{print $1,$3,$4}' /etc/passwd

root 0 0

bin 1 1

daemon 2 2

//以下省略多行

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

FS:指定每行文本的字段分隔符,默认为空格或制表位。

NF:当前处理的行的字段个数。

NR:当前处理的行的行号(序数)。

$0:当前处理的行的整行内容。

$n:当前处理行的第 n 个字段(第 n 列)。

FILENAME:被处理的文件名。

RS:数据记录分隔,默认为\n,即每行为一条记录。

按行输出文本:

[root@localhost ~]# awk 'NR==1,NR==3{print}' /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

[root@localhost ~]# awk -F ":" 'NR==1,NR==3{print $1,$3}' /etc/passwd

root 0

bin 1

daemon 2

[root@localhost ~]# awk -F ":" '(NR>=1)&&(NR<=3){print $1,$3}' /etc/passwd

root 0

bin 1

daemon 2

输出所有奇偶行的内容:

奇数行:

[root@localhost ~]# awk -F ":" 'NR%2==1{print $1,$3}' /etc/passwd

root 0

daemon 2

lp 4

shutdown 6

mail 8

games 12

nobody 99

dbus 81

abrt 173

rpc 32

saslauth 996

pulse 171

rpcuser 29

ntp 38

usbmuxd 113

qemu 107

setroubleshoot 993

gdm 42

sshd 74

postfix 89

zhou 1000

named 25

偶数行:

[root@localhost ~]# awk -F ":" 'NR%2==0{print $1,$3}' /etc/passwd

bin 1

adm 3

sync 5

halt 7

operator 11

ftp 14

systemd-network 192

polkitd 999

libstoragemgmt 998

colord 997

rtkit 172

chrony 995

nfsnobody 65534

tss 59

geoclue 994

radvd 75

sssd 992

gnome-initial-setup 991

avahi 70

tcpdump 72

dhcpd 177

输出以root开头的行:

[root@localhost ~]# awk '/^root/{print}' /etc/passwd

root:x:0:0:root:/root:/bin/bash

统计以/bin/bash结尾的行数:

[root@localhost ~]# awk 'BEGIN {x=0} ; /\/bin\/bash$/{x++};END {print x}' /etc/passwd

2

统计以空行分隔的文本段落数:

[root@localhost opt]# vim name.txt

zhangsan:lisi:wangwu

zhaoliu:liuliu

heiba:heihei

[root@localhost opt]# awk 'BEGIN{RS=":"};END{print NR}' /opt/name.txt

5

//统计规则:遇到关键符号,折行

字段输出:

[root@localhost opt]# awk -F ":" '$3=="0"{print}' /etc/passwd

root:x:0:0:root:/root:/bin/bash

[root@localhost opt]# awk -F ":" '$3=="0"{print $1,$7}' /etc/passwd

root /bin/bash

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

[root@localhost opt]# awk 'BEGIN{FS=":"};$3=="0"{print}' /etc/passwd

root:x:0:0:root:/root:/bin/bash

输出以冒号分隔且第7个字段包含bash:

[root@localhost opt]# awk -F : '$7~"bash"{print}' /etc/passwd

root:x:0:0:root:/root:/bin/bash

zhou:x:1000:1000:zhou:/home/zhou:/bin/bash

以冒号为分隔,输出第一个字段包含nfs且总字段数为7的第1,3,7字段

方法一:[root@localhost opt]# awk -F : '($1~"nfs")&&(NF==7){print $1,$3,$7}' /etc/passwd

nfsnobody 65534 /sbin/nologin

方法二:[root@localhost opt]# awk 'BEGIN{FS=":"};($1~"nfs")&&(NF==7){print $1,$3,$7}' /etc/passwd

nfsnobody 65534 /sbin/nologin

以冒号为分隔,第七个字段不包含/sbin/nologin且总字段为7的,1,3,7字段

[root@localhost opt]# awk 'BEGIN{FS=":"};($7!="/sbin/nologin")&&(NF==7){print $1,$3,$7}' /etc/passwd

root 0 /bin/bash

sync 5 /bin/sync

shutdown 6 /sbin/shutdown

halt 7 /sbin/halt

zhou 1000 /bin/bash

named 25 /bin/false

调用wc -l 命令统计使用bash 的用户个数:

[root@localhost opt]# awk -F : '/bash$/{print | "wc -l"}' /etc/passwd

2

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

[root@localhost opt]# awk 'BEGIN {while ("w" | getline) n++;{print n-2}}'

1

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

[root@localhost opt]# awk 'BEGIN {"hostname" | getline ; print $0}'

localhost.localdomain

sort工具

在 Linux 系统中,常用的文件排序工具有三种:sort、uniq、wc, 其中sort 是一个以行为单位对文件内容进行排序的工具,也可以根据不同的数据类型来排序。例如数据和字符的牌局就不一样。sort 命令的语法为“sort [选项] 参数”,其中常用的选项包括以下几种。

-f:忽略大小写

-b:忽略每行前面的空格

-M:按照月份进行排序

-n:按照数字进行排序

-r:反向排序

-u:等同于 uniq,表示相同的数据仅显示一行

-t:指定分隔符,默认使用[Tab]键分隔

-o :将排序后的结果转存至指定文件

-k:指定排序区域

uniq工具

Uniq 工具在 Linux 系统中通常与 sort 命令结合使用,用于报告或者忽略文件中的重复行。具体的命令语法格式为:uniq [选项] 参数。其中常用选项包括以下几种。

-c:进行计数

-d:仅显示重复行

-u:仅显示出现一次的行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值