awk、sed、date命令使用

时间:2023-03-09 15:40:10
awk、sed、date命令使用

个人学习笔记总结

[root@a ~]# awk 'END{print NR}' c.txt       #没错,这就是文件的行数,当然,这种统计方法不是linux下最快的,但也是一种思路
3
[root@a ~]# wc -l c.txt         #这种统计方法是linux下最快的
3 c.txt

[root@a ~]# head -3 /etc/passwd

root:a:0:0:root:/root:/bin/bash
bin:b:1:1:bin:/bin:/sbin/nologin
daemon:c:2:2:daemon:/sbin:/sbin/nologin

[root@a ~]# head -3 /etc/passwd | awk -F':' '{print $1}'

root
bin
daemon
[root@a ~]# head -3 /etc/passwd | awk -F':' '{print $2}'

a
b
c
[root@a ~]#head -3 /etc/passwd | awk -F':' '{print $1}{print $2}'    #有两个print,可以看到第二列放到了第一列之后换行显示
root
a
bin
b
daemon
c

[root@a ~]# head -3 /etc/passwd | awk -F':' '{print $1,"\n",$2}'    #在print中将$1和$2之间加一个\n,第二列前的空白字符也被输出了,两者还是有所区别

root
a
bin
b
daemon
c

[root@a ~]# head -5 /etc/passwd | awk -F: '{if(NR>2&&NR<5)print NR,$0}'    #awk条件语句,打印整行信息并显示打印行号
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin

awk -F':' '$1~/root/'  1.txt

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

111root222:x:0:0:root:/root:/sbin/nologin

awk -F':' '$1~/root/{OFS="#";print $1,$2,$3}'  1.txt

root#x#0

111root222#x#0

awk -F':' '$1=="root"{print$1,$2,$3}'  1.txt

root x 0

awk -F':' '$1=="root" || NR>=30{print $1,$2}' 1.txt

root x

rpc x

111

awk -F':' 'NF>3&&NR<3{print $1,$2,$3}' 1.txt

root x 0

111root222 x 0

~为模糊匹配,==表示精确匹配

[root@a ~]# awk -F':' 'NF>3&&NR>16{print NR,"\t",$3,$5}'  /etc/passwd

17   89
18   74 Privilege-separated SSH

打印符合条件的内容并显示行号

sed -r 's/([^:]+)(:.*:)([^:]+)/\3\2\1/' /etc/passwd | head -2

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

/sbin/nologin:x:1:1:bin:/bin:bin

sed -r 支持扩展功能,([^:]+)中的[^:]表示有一个或者多个非冒号的字符,()表示作为一个整体,在这里指匹配第一段;(:.*:)表示贪婪匹配,即只要以第一个为冒号,一直匹配到最好一个冒号结束。

[root@a ~]# date -d "-1 day" +"%F %T"
2019-04-28 09:44:13

"-1 day" 表示昨天的时间和日期,-d 表示用字符串描述的显示时间,而不是“现在”

[root@a ~]# date -d "+1 month" +"%F %T"
2019-05-29 09:48:03

"+1 month"表示下个月的日期和时间

[root@a ~]# date +%F      #显示日期
2019-04-29        
[root@a ~]# date +%T      #显示时间
09:50:17
[root@a ~]# date +%Y-%m-%d    #显示日期
2019-04-29
[root@a ~]# date +"%Y-%m-%d %H:%M:%S"    #显示日期和时间
2019-04-29 09:51:51

[root@a ~]# date +%w      #显示周几
1
[root@a ~]# date +%W      #显示第几周
17

[root@a ~]# echo "365/7"| bc    #计算一年有多少周
52