千家信息网

sed和awk的练习

发表于:2024-10-28 作者:千家信息网编辑
千家信息网最后更新 2024年10月28日,使用sed打印出IP地址:[root@Srv02 ~]# ifconfig eth0 |grep Mask|sed 's/^.*dr://g'|sed 's/Bc.*$//g'192.168.1.22
千家信息网最后更新 2024年10月28日sed和awk的练习

使用sed打印出IP地址:

[root@Srv02 ~]# ifconfig eth0 |grep Mask|sed 's/^.*dr://g'|sed 's/Bc.*$//g'192.168.1.223
[root@Srv02 ~]# ifconfig eth0 |grep Mask|sed -n 's/^.*dr:\(.*\)Bc.*$/\1/gp'192.168.1.223

awk打印IP:

[root@Srv02 ~]# ifconfig eth0 |grep Mask|awk '{print $2}'|awk -F: '{print $2}'192.168.1.223
[root@Srv02 ~]# ifconfig eth0 |grep Mask|awk -F[:\ ] '{print $13}'192.168.1.223

使用awk内部变量的方式指定分隔符:

[root@Srv02 ~]# ifconfig eth0|grep Mask|awk 'BEGIN{FS="[:\\ ]"}{print $13}'192.168.1.223

打印/etc/passwd文件内,$1为weblogic和tomcat的两行(使用判断语句):

[root@Srv02 ~]# more /etc/passwd|awk -F: '{if ($1=="weblogic" || $1=="tomcat" ) print $0}'weblogic:x:501:503::/home/weblogic:/bin/bashtomcat:x:502:504::/home/tomcat:/bin/bash

这里使用~也是一样的效果:

[root@Srv02 ~]# more /etc/passwd|awk -F: '{if ($1~"weblogic" || $1~"tomcat" ) print $0}'weblogic:x:501:503::/home/weblogic:/bin/bashtomcat:x:502:504::/home/tomcat:/bin/bash

如果$1为变量name的值,就整行输出:

[root@Srv02 ~]# more /etc/passwd|awk -F: 'BEGIN{name="oracle"}{if($1~name)print $0}'oracle:x:500:500::/home/oracle:/bin/bash

awk内部变量的介绍:

NF:表示有多少列。

$NF:表示最后一列。

NR:表示行号。

ORS:输出记录分割符

OFS:输出字段分割符

RS: 记录分割符

[root@Srv02 ~]# tail -4 /etc/passwdoracle:x:500:500::/home/oracle:/bin/bashweblogic:x:501:503::/home/weblogic:/bin/bashtomcat:x:502:504::/home/tomcat:/bin/bashnx:x:102:158::/usr/NX/home/nx:/usr/NX/bin/nxserver[root@Srv02 ~]# tail -4 /etc/passwd | awk '{print NF}'1111[root@Srv02 ~]# tail -4 /etc/passwd | awk -F: '{print NF}'7777[root@Srv02 ~]# tail -4 /etc/passwd | awk -F: '{print $NF}'/bin/bash/bin/bash/bin/bash/usr/NX/bin/nxserver

使用awk打印端口号:

[root@Srv02 ~]# netstat -ntl |awk '{if($4~"[0-9]$") print $4}'|awk -F: '{print $NF}'80018005800933801
.....

使打印输出显示行号:

[root@Srv02 ~]# awk -F: '{print NR,$1}' /etc/passwd1 root2 bin3 daemon4 adm5 lp6 sync

显示$1为oracle的这一行的行号:

[root@Srv02 ~]# more /etc/passwd |awk -F: '{if ($1~"oracle") print NR}'39

输出时以###作为字段分隔符:

[root@Srv02 ~]# tail -4 /etc/passwd |awk -F: 'BEGIN {OFS="###"}{print $1,$7,$3}'oracle###/bin/bash###500weblogic###/bin/bash###501tomcat###/bin/bash###502nx###/usr/NX/bin/nxserver###102
0