sed与awk

环境准备

[root@oldboy ~]# cat >>fanzhi.txt< 101,oldboy,CEO
> 102,zhangyao,CTO
> 103,Alex,COO
> 104,yy,CFO
> 105,feixue,CIO
> 110,lidao,COCO
> EOF

sed命令查找

查找指定的行

[root@oldboy ~]# sed -n '3p' #fanzhi.txt##查找显示第三行
oldboy
[root@oldboy ~]# sed -n '1,5p' fanzhi.txt##查找显示第一行到底5行
FANZHI
fanzhi
oldboy
gelong GELONG

过滤出指定的行

[root@oldboy ~]# sed -n '/[a-z]/p' fanzhi.txt##查找出包含a-z(26个字母)这个范围行
fanzhi
oldboy
gelong GELONG
oldgirg
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
[root@oldboy ~]# sed -nr '/oldboy|yy/p' fanzhi.txt##查找出包含oldboy或者yy的行
oldboy
101,oldboy,CEO
104,yy,CFO

grep 命令实现

[root@oldboy ~]# grep 'oldboy\|yy' fanzhi.txt
oldboy
101,oldboy,CEO
104,yy,CFO

这里的例子包含扩展正则符号,不适用egrep也可以实现的原因是因为给|符号使用了转义符号。了解即可。

取一个范围的的字符串

[root@oldboy ~]# sed -n '/102/,/105/p' fanzhi.txt##查找出包含102到第一个包含105的行
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO

sed增加

追加到指定行下面的一行

[root@oldboy ~]# sed '3a fanzhibaba' fanzhi.txt##追加到第三行后面
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
fanzhibaba
104,yy,CFO
105,feixue,CIO
110,lidao,COCO

插入到指定行

[root@oldboy ~]# sed '1i12306,fanzhi,HO' fanzhi.txt#插入第一行
12306,fanzhi,HO
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO

先清空指定行再写入

[root@oldboy ~]# sed '1c12306,fanzhi,HO' fanzhi.txt#删除指定行再写入
12306,fanzhi,HO
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO

删除

原始文件

[root@oldboy ~]# cat  -n fanzhi.txt##原始文件里有空行
     1  FANZHI
     2  fanzhi
     3  oldboy
     4  gelong GELONG
     5  
     6  oldgirg
     7  101,oldboy,CEO
     8  102,zhangyao,CTO
     9  103,Alex,COO
    10  104,yy,CFO
    11  105,feixue,CIO
    12  110,lidao,COCO

使用正则删除空行
[root@oldboy ~]# sed '/^$/d' fanzhi.txt|cat -n     1    FANZHI
     2  fanzhi
     3  oldboy
     4  gelong GELONG
     5  oldgirg
     6  101,oldboy,CEO
     7  102,zhangyao,CTO
     8  103,Alex,COO
     9  104,yy,CFO
    10  105,feixue,CIO
    11  110,lidao,COCO

使用正则显示空行并进行取反,达到删除空行的效果
[root@oldboy ~]# sed -n '/^$/!p' fanzhi.txt|cat -n     1    FANZHI
     2  fanzhi
     3  oldboy
     4  gelong GELONG
     5  oldgirg
     6  101,oldboy,CEO
     7  102,zhangyao,CTO
     8  103,Alex,COO
     9  104,yy,CFO
    10  105,feixue,CIO
    11  110,lidao,COCO

练习:

原始文件

[root@oldboy ~]#cat  /etc/ssh/sshd_config
……
省略若干
# Accept locale-related environment variables
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS

# override default of no subsystems
Subsystem   sftp    /usr/libexec/openssh/sftp-server

# Example of overriding settings on a per-user basis
#Match User anoncvs
#   X11Forwarding no
#   AllowTcpForwarding no
#   PermitTTY no
#   ForceCommand cvs server

删除文件中包含#和空格的行

[root@oldboy ~]# sed -r '/^$|^#/d' /etc/ssh/sshd_config
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
SyslogFacility AUTHPRIV
AuthorizedKeysFile  .ssh/authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication no
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding yes
UseDNS no
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem   sftp    /usr/libexec/openssh/sftp-server

其他方法
sed -rn '/^$|^#/!p' /etc/ssh/sshd_config
egrep -v '^$|^#' /etc/ssh/sshd_config
awk '!/^$|^#/' /etc/ssh/sshd_config
对于这个配置文件还可以使用:
grep '^[a-z] ' /etc/ssh/sshd_config

替换

原始文件

[root@oldboy ~]# cat /oldboy/oldboy.txt
I am oldboy teacher!
gebangfegn
I teacher linux.
gebangfegn
I teach linux.
I teacher linux.

把所有带oldboy的行替换成alex.

[root@oldboy ~]# sed 's#oldboy#alex#g' /oldboy/oldboy.txt
I am alex teacher!
I teacher linux.
gebangfegn
I teach linux.
I teacher linux.

练习

[root@oldboy ~]# echo 123456 |sed -r 's#(.*)#<\1>#g'
<123456>
[root@oldboy ~]# echo 123456 |sed -r 's#(.)#<\1>#g'
<1><2><3><4><5><6>
[root@oldboy ~]# echo 123456 |sed -r 's#(..)(..)(..)#\1<\2>\3#g'
12<34>56

指定网卡 查

[root@oldboy /]# ip a s eth0
2: eth0:  mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:d1:fb:44 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.200/24 brd 10.0.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fed1:fb44/64 scope link 
       valid_lft forever preferred_lft forever

1.取出网卡信息的ip地址

使用sed正则:

[root@oldboy ~]# ip a s eth0|sed -n 3p##先取出这一行
    inet 10.0.0.200/24 brd 10.0.0.255 scope global eth0
[root@oldboy ~]# ip a s eth0|sed -n 3p|sed -r 's#^.*t ##g'##把前面的去掉
10.0.0.200/24 brd 10.0.0.255 scope global eth0
[root@oldboy ~]# ip a s eth0|sed -n 3p|sed -r 's#^.*t ##g'|sed -r 's#/.*$##g'#把后面的去掉
10.0.0.200

使用sed后向引用

[root@oldboy ~]# ip a s eth0|sed -n 3p|sed -r 's#^.*t (.*)/.*$#\1#g'##组合在一起
10.0.0.200

更清晰看清楚后向引用

[root@oldboy ~]# ip a s eth0|sed -n 3p|sed -r 's#(^.*t )(.*)(/.*$)#\1#g'
    inet 
[root@oldboy ~]# ip a s eth0|sed -n 3p|sed -r 's#(^.*t )(.*)(/.*$)#\2#g'
10.0.0.200
[root@oldboy ~]# ip a s eth0|sed -n 3p|sed -r 's#(^.*t )(.*)(/.*$)#\3#g'
/24 brd 10.0.0.255 scope global eth0

使用awk

[root@oldboy ~]# ip a s eth0|awk -F"[ /]+" 'NR==3{print $3}'
10.0.0.200

取出stat /etc/hosts权限644

[root@oldboy ~]# stat /etc/hosts
  File: ‘/etc/hosts’
  Size: 188         Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d  Inode: 17050962    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:net_conf_t:s0
Access: 2019-05-01 00:00:36.279001729 +0800
Modify: 2019-04-01 17:16:38.000000000 +0800
Change: 2019-04-10 16:00:51.227612667 +0800
 Birth: -

后向引用

[root@oldboy ~]# stat /etc/hosts|sed -n 4p|sed -r 's#^.*\(0(.*)/-.*#\1#g'
644

awk命令详解取行及取列详解

1.环境准备

[root@oldboy ~]# cat set.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
gebangfeng COF
119,xiaohong,UFO
119,xiaohong,UFO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
105,feixue,CIO
2.取出某行
[root@oldboy ~]# awk 'NR==3' set.txt
103,Alex,COO
3.过滤出某行

[root@oldboy ~]# awk '/oldboy/' set.txt
101,oldboy,CEO

取出某行并显示行号

[root@oldboy ~]# awk 'NR==1' sed.txt
101,oldboy,CEO
[root@oldboy ~]# awk 'NR==1{print NR}' sed.txt
1
[root@oldboy ~]# awk 'NR==1{print NR $0}' sed.txt
1101,oldboy,CEO
4.取出第一列
[root@oldboy ~]# awk -F"[ ,]" '{print $1}' set.txt##这里的-F为给他指定分隔符  为空格和,
101
102
103
119
119
104
105
110
105
5.取出第一列和第二列
[root@oldboy ~]# awk -F"[ ,]" '{print $1,$2}' set.txt
101 oldboy
102 zhangyao
103 Alex
119 xiaohong
119 xiaohong
104 yy
105 feixue
110 lidao
105 feixue
取出第一列和第二列并加上任意字符
[root@oldboy ~]# awk -F"[ ,]" '{print $1"@@@"$2}' set.txt
101@@@oldboy
102@@@zhangyao
103@@@Alex
devin@@@COF
119@@@xiaohong
119@@@xiaohong
104@@@yy
105@@@feixue
110@@@lidao
105@@@feixue
6.取出第一行的二三列
[root@oldboy ~]# awk -F"[ ,]" 'NR==1{print $2,$3}' set.txt
oldboy CEO
7.快速取出最后一列
[root@oldboy ~]# awk -F'[, ]+' '{print $NF}' set.txt
CEO
CTO
COO
COF
UFO
UFO
CFO
CIO
COCO
CIO
8.快速取出倒数第二列
[root@oldboy ~]# awk -F',' '{print $(NF-1)}' sed.txt
oldboy
zhangyao
Alex
yy
feixue
lidao

awk命令比较大小详解

原始环境

[root@oldboy ~]# cat /etc/passwd
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
oldboy:x:1000:1000::/home/oldboy:/bin/bash
boy1:x:1001:1001::/home/boy1:/bin/bash
fanzhi:x:1002:1002::/home/fanzhi:/bin/bash
oldboy1:x:1003:1003::/home/oldboy1:/bin/bash
oldboy2:x:1004:1004::/home/oldboy2:/bin/bash
1.找出文件中第三列中大于999的行
[root@oldboy ~]# awk -F":" '$3>999' /etc/passwd
oldboy:x:1000:1000::/home/oldboy:/bin/bash
boy1:x:1001:1001::/home/boy1:/bin/bash
fanzhi:x:1002:1002::/home/fanzhi:/bin/bash
oldboy1:x:1003:1003::/home/oldboy1:/bin/bash
oldboy2:x:1004:1004::/home/oldboy2:/bin/bash
找出文件中第四列中大于0并且小于999的行
[root@oldboy ~]# awk -F":" '$4>0&&$4<1000' /etc/passwd
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
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
找出磁盘空间信息中第五列大于10的行
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        20G  2.0G   18G  11% /
devtmpfs        476M     0  476M   0% /dev
tmpfs           487M     0  487M   0% /dev/shm
tmpfs           487M   14M  473M   3% /run
tmpfs           487M     0  487M   0% /sys/fs/cgroup
/dev/sda1       197M  105M   93M  54% /boot
tmpfs            98M     0   98M   0% /run/user/0
[root@oldboy ~]# df -h |awk '$5+0>10'
/dev/sda3        20G  2.0G   18G  11% /
/dev/sda1       197M  105M   93M  54% /boot

第二种方法

[root@oldboy ~]# df -h |awk -F'[% ]+' '$5>10'
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        20G  2.0G   18G  11% /
/dev/sda1       197M  105M   93M  54% /boot

环境准备

mkdir -p /server/files/
cat >>/server/files/reg.txt<

 第一列是姓氏
 第二列是名字
 第一第二列合起来就是姓名
 第三列是对应的ID号码
 最后三列是三次捐款数量

1.查找指定列中包含指定字符结尾的行

[root@oldboyedu59 /oldboy]# awk '$2~/i$/' /server/files/reg.txt
Wu    Waiwai    70271111   :250:80:75
Wang  Xiaoai    3515064655 :50:95:135
Lao   Nanhai    918391635  :250:100:175

2.查找指定列中包含指定字符结尾的行并指定显示列数

[root@oldboyedu59 /oldboy]# awk '$2~/i$/{print $1,$2,$3}' /server/files/reg.txt
Wu Waiwai 70271111
Wang Xiaoai 3515064655
Lao Nanhai 918391635

练习

1.显示Xiaoyu的姓氏和ID号码

[root@oldboyedu59 /oldboy]# awk '$2~/Xiaoyu/' /server/files/reg.txt
Zhang Xiaoyu    390320151  :155:90:201
[root@oldboyedu59 /oldboy]# 
[root@oldboyedu59 /oldboy]# awk '$2~/Xiaoyu/{print $1,$3}' /server/files/reg.txt
Zhang 390320151

2.姓氏是Zhang的人,显示他的第二次捐款金额及她的名字

[root@oldboy ~]# awk -F'[ :]' '$1~/Zhang/{print $1,$2,$(NF-1)}' /server/files/reg.txt
Zhang Dandan 100
Zhang Xiaoyu 90

3.显示所有ID号码最后一位数字是1或5的人的全名

[root@oldboy ~]# awk '$3~/[15]$/{print $1,$2}' /server/files/reg.txt
Zhang Xiaoyu
Wu Waiwai
Wang Xiaoai
Li Youjiu
Lao Nanhai

4.显示所有人的全名,以姓,名的格式显示,如Meng,Feixue

[root@oldboy ~]# awk '{print $1","$2}' /server/files/reg.txt
Zhang,Dandan
Zhang,Xiaoyu
Meng,Feixue
Wu,Waiwai
Liu,Bingbing
Wang,Xiaoai
Zi,Gege
Li,Youjiu
Lao,Nanhai

5.显示Xiaoyu的捐款.每个值时都有以[图片上传失败...(image-df9c0d-1558409466612)]

[root@oldboy ~]# awk '$2~/Xiaoyu/{gsub(/:/,"$"); print $NF}' /server/files/reg.txt
$155$90$201
[root@oldboy ~]# awk '$2~/Xiaoyu/{print $NF}' /server/files/reg.txt|tr ':' '$'
$155$90$201
[root@oldboy ~]# awk '$2~/Xiaoyu/{print $NF}' /server/files/reg.txt|sed 's#:#$#g'
$155$90$201

s==sub
gsub(/:/,"$")
gsub(/找谁/,"替换成什么")
gsub(/找谁/,"替换成什么",某一列)

2.创建环境:

head /etc/passwd >/oldboy/passwd.txt
调换/oldboy/passwd.txt文件的第1列和最后一列的位置(不用修改文件内容)

文件内容:

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

将文件的第一列与最后一列换下位置

sed方法

[root@oldboy /oldboy]# sed -r 's#(^.*)(:x.*:)(.*$)#\3\2\1#g' passwd.txt
/bin/bash:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin
/sbin/nologin:x:2:2:daemon:/sbin:daemon
/sbin/nologin:x:3:4:adm:/var/adm:adm
/sbin/nologin:x:4:7:lp:/var/spool/lpd:lp
/bin/sync:x:5:0:sync:/sbin:sync
/sbin/shutdown:x:6:0:shutdown:/sbin:shutdown
/sbin/halt:x:7:0:halt:/sbin:halt
/sbin/nologin:x:8:12:mail:/var/spool/mail:mail
/sbin/nologin:x:11:0:operator:/root:operator

awk 方法1

[root@oldboyedu59 /oldboy]# awk -F: '{print $7":"$2":"$3":"$4":"$5":"$6":"$1}' passwd.txt
/bin/bash:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin
/sbin/nologin:x:2:2:daemon:/sbin:daemon
/sbin/nologin:x:3:4:adm:/var/adm:adm
/sbin/nologin:x:4:7:lp:/var/spool/lpd:lp
/bin/sync:x:5:0:sync:/sbin:sync
/sbin/shutdown:x:6:0:shutdown:/sbin:shutdown
/sbin/halt:x:7:0:halt:/sbin:halt
/sbin/nologin:x:8:12:mail:/var/spool/mail:mail
/sbin/nologin:x:11:0:operator:/root:operator

awk 方法2

[root@oldboy /oldboy]# awk '{tmp=$1;$1=$NF;$NF=$1;print $0}' passwd.txt
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

awk-调换 /etc/passwd第1列和最后一列的内容-说明
https://www.processon.com/view/link/5aa1df8ae4b0b089b9e60cbd

什么是OFS

OFS awk在显示每一列的时候 每一列之间通过什么分割
OFS的内容就是 ,的内容
Output Field Separator 输出分隔符
例子:

[root@oldboyedu59 /oldboy]# awk -F: -vOFS=":" '{tmp=$1;$1=$NF;$NF=tmp;print $0 }' passwd.txt
/bin/bash:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin
/sbin/nologin:x:2:2:daemon:/sbin:daemon
/sbin/nologin:x:3:4:adm:/var/adm:adm
/sbin/nologin:x:4:7:lp:/var/spool/lpd:lp
/bin/sync:x:5:0:sync:/sbin:sync
/sbin/shutdown:x:6:0:shutdown:/sbin:shutdown
/sbin/halt:x:7:0:halt:/sbin:halt
/sbin/nologin:x:8:12:mail:/var/spool/mail:mail
/sbin/nologin:x:11:0:operator:/root:operator

awk计算

[root@oldboyedu59 /oldboy]# awk 'BEGIN{print 1/3,2*4,2*2*2*2*2,2^10}'
0.333333 8 32 1024

环境准备

root@oldboyedu59 /oldboy]# cat /oldboy/oldboy.txt
I am oldboy teacher!
I teach linux.

I like badminton ball,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my qq is 1351441522

not 4900000448
my god,i am not oldbey,but OLDBOY!
oldboy oldboy oldboy

统计文件中空行的数量

方法1

[root@oldboyedu59 /oldboy]#awk '/^$/' oldboy.txt| wc -l
2

方法2

[root@oldboyedu59 /oldboy]# awk '/^$/{i=i+1;print i}' /oldboy/oldboy.txt
1
2
[root@oldboyedu59 /oldboy]# awk '/^$/{i=i+1}END{print i}' oldboy.txt
17

统计access.log中 第9列是200的数量

[root@oldboyedu59 /oldboy]# awk '$9==200{i++}END{print i}'   access.log 
142666
[root@oldboyedu59 /oldboy]# awk '$9~/^200$/{i++}END{print i}'   access.log 
142666

i++ ==i=i+1

统计1-10这些数相加的总和

[root@oldboyedu59 /oldboy]# seq 10  |awk '{i=i+$1;print i}'
1
3
6
10
15
21
28
36
45
55
[root@oldboy /oldboy]# seq 10 |awk '{i=i+$1}END{print i}'
55

1+...+10
i i=i+$1 i
1 空 i=0+1 1
2 1 i=1+2 3
3 3 i=3+3 6
4 6 i=6+4 10

取出目录oldboy的权限0755不少于三种方法

查看权限信息

[root@oldboy ~]# stat oldboy
  File: ‘oldboy’
  Size: 66          Blocks: 0          IO Block: 4096   directory
Device: 803h/2051d  Inode: 17175899    Links: 2
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2019-05-02 11:37:29.331805717 +0800
Modify: 2019-04-28 21:55:17.336783817 +0800
Change: 2019-04-28 21:55:17.336783817 +0800

目标:取出0755
解决

第一种方法sed
总体·思路先取出需要的一行。再进行替换为空
[root@oldboy ~]# stat oldboy|sed -n 4p|sed -r 's#^.*s: \(##g'
0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
[root@oldboy ~]# stat oldboy|sed -n 4p|sed -r 's#^.*s: \(##g'|sed 's#/d.*$##g'
0755
第二种方法sed后向引用

后向引用格式

sed -n 's#()()#\1\2#gp' filename
1
当在前面匹配部分用小括号的时候
第一个括号内容,可以在后面部分用\1输出;
第二个括号内容,可以在后面部分用\2输出


[root@oldboy ~]# stat oldboy|sed -rn '4s#^.*s: \((.*)/d.*$#\1#gp'
0755
第三种方法awk
[root@oldboy ~]# stat oldboy|awk -F'[(/]+' 'NR==4{print $2}'
0755
第四种方法grep
[root@oldboy ~]# stat oldboy|egrep -o '[0-9]{4}'|grep '5$'
0755
第五种方法grep
[root@oldboy ~]# stat oldboy|grep 'Uid'|egrep  -o '[0-9]{4}'
0755

你可能感兴趣的:(sed与awk)