Linux系统Shell脚本 文件三剑客-------------awk

目录

一、awk简介

二、awk工作原理

三、awk基本格式

四、awk基础用法

提取df已用%这一列

提取ip地址

五、awk 常见的内置变量

提取df已用%这一列

NR——筛选ip地址行

 打印出普通用户

找出当前文件中uid最大的用户名

FNR——查看多个文件各有多少行

六、自定义变量

七、printf

八、模式PATTERN

1.模式为空

2.正则匹配

3.  line ranges:行范围

4 BEGIN END

5 关系表达式

6.条件判断

7.  循环  for | while

awk求1到100的和

8.数组 

1.awk数组特性:

2.访问、赋值数组元素

3.遍历数组

4.awk脚本

九、

①统计当前主机的连接状态

方法一:

方法二:

方法三:

②去重

③统计当前连接主机数

④提取下面的字段中的 IP地址和时间

方法一:

方法二:

方法三:awk 命令提取

方法四:sed 命令提取

⑤提取host.txt主机名后再放回host.txt文件

 ⑥统计/etc/fstab文件中每个文件系统类型出现的次数

⑦统计/etc/fstab文件中每个真单词出现的次数

⑧提取出字符串中的所有数字

⑨ 查出/tmp/的权限,以数字方式显示

⑩查出用户UID最大值的用户名、UID及shell类型

⑪提取主机名并放入原文件 


一、awk简介

  • AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。
  • 之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。

awk:Aho, Weinberger, Kernighan,报告生成器,格式化文本输出,GNU/Linux发布的AWK目前由自由软件基金会(FSF)进行开发和维护,通常也称它为 GNU AWK

有多种版本:

  • AWK:原先来源于 AT & T 实验室的的AWK

  • NAWK:New awk,AT & T 实验室的AWK的升级版

  • GAWK:即GNU AWK。所有的GNU/Linux发布版都自带GAWK,它与AWK和NAWK完全兼容

二、awk工作原理

awk 比较倾向于将一行分成多个“字段”然后再进行处理,且默认情况下字段的分隔符为空格或 tab 键。awk 执行结果可以通过 print 的功能将字段数据打印显示。

awk为流编辑器,即读取文件一行处理一行。

三、awk基本格式

格式

awk [options]   'program' var=value   file…

说明:

program通常是被放在单引号中,并可以由三种部分组成

  • BEGIN语句块

  • 模式匹配的通用语句块

  • END语句块

常见选项:

  • -F “分隔符” 指明输入时用到的字段分隔符默认的分隔符是若干个连续空白符

  • -v     变量赋值

awk  [选项]   '处理模式{处理动作}'             '{ }'为固定格式      处理动作print:打印

选项若不写默认为以空格为分隔符处理,且会将空格自动压缩。

四、awk基础用法

awk  '{print "hello"}'  

awk可以支持标准输入、标准输出、还有后面写文件

awk '{print "hello"}' < /etc/passwd

提取df已用%这一列

方法一:

df |awk '{print$5}'|tail -n +2|tr -d %

方法二:

df |awk -F "[ %]+" '{print $5}'|tail -n +2

方法三:

输出 /etc/passwd文件中以 ":" 分隔的第一列和第三字段

awk -F: '{print $1,$3}' /etc/passwd

输出内容可以修改,使用 :  或者+++ 等分隔开都可以

用  :  分隔开

cat /etc/passwd|awk -F: '{print $1"\t"$3}'

$0代表全部元素  

'{print $1}' 即为打印第一列

'{print $n}'即打印为第n列,'{print $n,$m}'即为打印第n列和第m列

awk '/^root/{print}' passwd

提取ip地址

[root@zzh data]#ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.246.7  netmask 255.255.255.0  broadcast 192.168.246.255
        inet6 fe80::183e:c32:9272:8ece  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:e7:53:3a  txqueuelen 1000  (Ethernet)
        RX packets 22909  bytes 4751008 (4.5 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7456  bytes 724739 (707.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@zzh data]#ifconfig ens33 |awk '/netmask/{print$2}'
192.168.246.7
[root@zzh data]#ifconfig ens33 |sed -nr '2s/.*inet (.*)  netmask.*/\1/p'
192.168.246.7
[root@zzh data]#

五、awk 常见的内置变量

awk 选项 '模式{print }'

  • FS :列分割符,指定每行文本的字段分隔符,缺省默认为空格或制表符(tab)

  • OFS:输出时的分隔符

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

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

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

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

  • FILENAME:被处理的文件名

  • RS:行分隔符。awk从文件上读取资料时,将根据RS的定义就把资料切割成许多条记录,而awk一次仅读入一条记录进行处理。预设值是\n

  -F “分隔符” 指明输入时用到的字段分隔符默认的分隔符是若干个连续空白符

FS :列分割符,指定每行文本的字段分隔符,缺省默认为空格或制表符(tab)

shell中的变量

OFS   输出时的分隔符

awk -v FS=':' -v OFS='==' '{print $1,$3}' /etc/passwd

RS 行分隔符 ,换行  

默认是以  /n(换行符)为一条记录的分隔符

    NF  代表字段的个数

提取df已用%这一列

df |awk '{print $(NF-1)}'

df|awk -F "[ %]+" '{print $(NF-1)}'

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

NR——筛选ip地址行

[root@zzh data]#ifconfig ens33|awk 'NR==2'
        inet 192.168.246.7  netmask 255.255.255.0  broadcast 192.168.246.255
[root@zzh data]#ifconfig ens33|awk 'NR==2{print $0}'
        inet 192.168.246.7  netmask 255.255.255.0  broadcast 192.168.246.255
[root@zzh data]#ifconfig ens33|awk 'NR==2{print}'
        inet 192.168.246.7  netmask 255.255.255.0  broadcast 192.168.246.255
[root@zzh data]#ifconfig ens33|awk 'NR>=2&&NR<=5{print}'
        inet 192.168.246.7  netmask 255.255.255.0  broadcast 192.168.246.255
        inet6 fe80::183e:c32:9272:8ece  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:e7:53:3a  txqueuelen 1000  (Ethernet)
        RX packets 27637  bytes 5078712 (4.8 MiB)
[root@zzh data]#ifconfig ens33|awk 'NR!=1{print}'
        inet 192.168.246.7  netmask 255.255.255.0  broadcast 192.168.246.255
        inet6 fe80::183e:c32:9272:8ece  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:e7:53:3a  txqueuelen 1000  (Ethernet)
        RX packets 27716  bytes 5084622 (4.8 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8999  bytes 876669 (856.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

面试题:

 打印出普通用户

找出当前文件中uid最大的用户名

[root@zzh data]#awk -F: '$3>=1000{print $1,$3}' /etc/passwd
nfsnobody 65534
zz 1000
[root@zzh data]#awk -F: '$3>=1000{print $1,$3}' /etc/passwd|sort -n
nfsnobody 65534
zz 1000
[root@zzh data]#cat /etc/passwd |sort -t: -k3 -n |tail -n1
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
[root@zzh data]#

FNR——查看多个文件各有多少行

FILENAME   显示处理的文件名

六、自定义变量

[root@localhost ~]#awk -v test='hello' 'BEGIN{print test}'
hello
awk -v test1=test2="hello" 'BEGIN{test1=test2="hello";print test1,test2}'



awk  -v test='hello gawk' '{print test}' /etc/fstab 
awk  -v test='hello gawk' 'BEGIN{print test}'
awk  'BEGIN{test="hello,gawk";print test}'
awk  -F: '{sex="male";print $1,sex,age;age=18}' /etc/passwd

七、printf

printf   
%s:显示字符串
%d, %i:显示十进制整数
%f:显示为浮点数
%e, %E:显示科学计数法数值 
%c:显示字符的ASCII码
%g, %G:以科学计数法或浮点形式显示数值
%u:无符号整数
%%:显示%自身

awk -F:  '{printf "%s",$1}' /etc/passwd
awk -F:   '{printf "%s\n",$1}' /etc/passwd
awk -F:   '{printf "%20s\n",$1}' /etc/passwd
awk -F:   '{printf "%-20s\n",$1}' /etc/passwd
awk -F:   '{printf "%-20s %10d\n",$1,$3}' /etc/passwd
awk -F:   '{printf "Username: %s\n",$1}' /etc/passwd
awk -F:   '{printf “Username: %sUID:%d\n",$1,$3}' /etc/passwd
awk -F:   '{printf "Username: %25sUID:%d\n",$1,$3}' /etc/passwd
awk -F:   '{printf "Username: %-25sUID:%d\n",$1,$3}' /etc/passwd


awk -F:   'BEGIN{printf "--------------------------------\n%-20s|%10s|\n--------------------------------\n","username","uid"}{printf "%-20s|%10d|\n--------------------------------\n",$1,$3}' /etc/passwd

八、模式PATTERN

awk ' 模式 {处理动作} '

PATTERN:根据pattern条件,过滤匹配的行,再做处理

1.模式为空

如果模式为空表示每一行都匹配成功,相当于没有额外条件

2.正则匹配

正则匹配:与正则表达式配合使用。

/regular expression/:仅处理能够模式匹配到的行,需要用/ /括起来

3.  line ranges:行范围

不支持使用行号,但是可以使用变量NR 间接指定行号加上比较操作符 或者逻辑关系

算术操作符
x+y, x-y, x*y, x/y, x^y, x%y
-x:转换为负数
+x:将字符串转换为数值

比较操作符:
==, !=, >, >=, <, <=

逻辑关系
与:&&,并且关系
或:||,或者关系
非:!,取反

面试题:

找到10:00到11:00的日志      大概写一下

通过awk找      awk '/10/,/11/'   文件名

通过sed找      sed -nr '/10/,/11/p'  文件名

4 BEGIN END

BEGIN{}:仅在开始处理文件中的文本之前执行一次

END{}:仅在文本处理完成之后执行一次

BEGIN{ }模式表示,在处理指定的文本前,需要先执行BEGIN模式中的指定动作; awk再处理指定的文本,之后再执行END模式中的指定动作,END{ }语句中,一般会放入打印结果等语句

END{}:仅在文本处理完成之后执行一次

BEGIN{}:仅在开始处理文件中的文本之前执行一次

5 关系表达式

关系表达式结果为“真”才会被处理

真:结果为非0值,非空字符串

假:结果为空字符串或0值

[root@zzh data]#seq 10 |awk 'n++'
2
3
4
5
6
7
8
9
10
[root@zzh data]#seq 10 |awk '!n++'
1
[root@zzh data]#
[root@zzh data]#seq 10 |awk '!0'
1
2
3
4
5
6
7
8
9
10

seq 10 |awk 'i=!i'    奇数行
seq 10 |awk -v i=1 'i=!i'    偶数行
seq 10 |awk '!(i=!i)'        偶数行

6.条件判断

awk 选项 '模式 {actions}'

条件判断写在 actions里

格式:

if语句:awk的if语句也分为单分支、双分支和多分支
单分支为if(判断条件){执行语句}
双分支为if(判断条件){执行语句}else{执行语句}
多分支为if(判断条件){执行语句}else if(判断条件){执行语句}else if(判断条件){执行语句}else if(判断条件){执行语句}

awk -F: '{if($3>1000){print $1,$3}else{print $3}}' /etc/passwd

条件判断的格式为:  '{if(条件判断){命令序列1}else{命令序列2}}'

7.  循环  for | while

awk求1到100的和

awk还支持for循环、while循环、函数、数组等

8.数组 

1.awk数组特性:

  • awk的数组是关联数组(即key/value方式的hash数据结构),索引下标可为数值(甚至是负数、小数等),也可为字符串

  • 在内部,awk数组的索引全都是字符串,即使是数值索引在使用时内部也会转换成字符串

  • awk的数组元素的顺序和元素插入时的顺序很可能是不相同的

  • awk数组支持数组的数组

2.访问、赋值数组元素

索引可以是整数、负数、0、小数、字符串。如果是数值索引,会按照CONVFMT变量指定的格式先转换成字符串

[root@localhost ~]#awk 'BEGIN{a[1]="people";print a[1]}'
people
[root@localhost ~]#awk 'BEGIN{weekdays["mon"]="Monday";weekdays["tue"]="Tuesday";print weekdays["mon"]}'
Monday

3.遍历数组

[root@zzh ~]#awk 'BEGIN{student[1]="wuwu";student["2"]="lili";student["3"]="zhzh";for(i in student)print student[i]}'
wuwu
lili
zhzh
[root@zzh ~]#awk 'BEGIN{student["aa"]="wuwu";student["bb"]="lili";student["cc"]="zhzh";for(i in student)print student[i]}'
lili
zhzh
wuwu

4.awk脚本

[root@centos7 ~]#cat test.awk
#!/bin/awk -f     声明解释器
#this is a awk script
{if($3>=1000)print $1,$3}
[root@centos8 ~]#chmod +x test.awk
[root@centos8 ~]#./test.awk -F: /etc/passwd
nobody 65534
zhangsan 1000

九、

①统计当前主机的连接状态

统计LISTEN变量出现多少次

方法一:

[root@zzh ~]#ss -natp
State      Recv-Q Send-Q          Local Address:Port                         Peer Address:Port              
LISTEN     0      128                         *:111                                     *:*                   users:(("systemd",pid=1,fd=63))
LISTEN     0      5               192.168.122.1:53                                      *:*                   users:(("dnsmasq",pid=1453,fd=6))
LISTEN     0      128                         *:22                                      *:*                   users:(("sshd",pid=1145,fd=3))
LISTEN     0      128                 127.0.0.1:631                                     *:*                   users:(("cupsd",pid=1142,fd=12))
LISTEN     0      100                 127.0.0.1:25                                      *:*                   users:(("master",pid=1422,fd=13))
LISTEN     0      128                 127.0.0.1:6010                                    *:*                   users:(("sshd",pid=14957,fd=9))
LISTEN     0      128                 127.0.0.1:6011                                    *:*                   users:(("sshd",pid=12608,fd=9))
ESTAB      0      0               192.168.246.7:22                          192.168.246.1:62089               users:(("sshd",pid=12608,fd=3))
ESTAB      0      0               192.168.246.7:22                          192.168.246.1:52744               users:(("sshd",pid=14957,fd=3))
LISTEN     0      128                        :::111                                    :::*                   users:(("systemd",pid=1,fd=62))
LISTEN     0      128                        :::80                                     :::*                   users:(("httpd",pid=13934,fd=4),("httpd",pid=13931,fd=4),("httpd",pid=13930,fd=4),("httpd",pid=13929,fd=4),("httpd",pid=13928,fd=4),("httpd",pid=7711,fd=4))
LISTEN     0      128                        :::22                                     :::*                   users:(("sshd",pid=1145,fd=4))
LISTEN     0      128                       ::1:631                                    :::*                   users:(("cupsd",pid=1142,fd=11))
LISTEN     0      100                       ::1:25                                     :::*                   users:(("master",pid=1422,fd=14))
LISTEN     0      128                       ::1:6010                                   :::*                   users:(("sshd",pid=14957,fd=8))
LISTEN     0      128                       ::1:6011                                   :::*                   users:(("sshd",pid=12608,fd=8))
[root@zzh ~]#ss -natp|awk 'NR!=1{print $1}'
LISTEN
LISTEN
LISTEN
LISTEN
LISTEN
LISTEN
LISTEN
ESTAB
ESTAB
LISTEN
LISTEN
LISTEN
LISTEN
LISTEN
LISTEN
LISTEN
[root@zzh ~]#ss -natp|awk 'NR!=1{print $1}'|sort
ESTAB
ESTAB
LISTEN
LISTEN
LISTEN
LISTEN
LISTEN
LISTEN
LISTEN
LISTEN
LISTEN
LISTEN
LISTEN
LISTEN
LISTEN
LISTEN
[root@zzh ~]#ss -natp|awk 'NR!=1{print $1}'|sort|uniq -c
      2 ESTAB
     14 LISTEN

方法二:

[root@zzh data]#ss -natp|awk 'NR!=1{a[$1]++}END{for(i in a)print i,a[i]}'
LISTEN 14
ESTAB 2
[root@zzh data]#

方法三:

[root@zzh data]#ss -natp|grep -v '^State' |cut -d" " -f1|sort|uniq -c
      1 ESTAB
     12 LISTEN

[root@zzh data]#ss -natp|grep "^[A-Z]"|grep -v '^State' |cut -d" " -f1|sort|uniq -c
      1 ESTAB
     12 LISTEN
[root@zzh data]#

代码:

[root@zzh data]#ss -natp
State      Recv-Q Send-Q          Local Address:Port                         Peer Address:Port              
LISTEN     0      128                         *:111                                     *:*                   users:(("systemd",pid=1,fd=63))
LISTEN     0      5               192.168.122.1:53                                      *:*                   users:(("dnsmasq",pid=1453,fd=6))
LISTEN     0      128                         *:22                                      *:*                   users:(("sshd",pid=1145,fd=3))
LISTEN     0      128                 127.0.0.1:631                                     *:*                   users:(("cupsd",pid=1142,fd=12))
LISTEN     0      100                 127.0.0.1:25                                      *:*                   users:(("master",pid=1422,fd=13))
LISTEN     0      128                 127.0.0.1:6010                                    *:*                   users:(("sshd",pid=14957,fd=9))
ESTAB      0      0               192.168.246.7:22                          192.168.246.1:52744               users:(("sshd",pid=14957,fd=3))
LISTEN     0      128                        :::111                                    :::*                   users:(("systemd",pid=1,fd=62))
LISTEN     0      128                        :::80                                     :::*                   users:(("httpd",pid=13934,fd=4),("httpd",pid=13931,fd=4),("httpd",pid=13930,fd=4),("httpd",pid=13929,fd=4),("httpd",pid=13928,fd=4),("httpd",pid=7711,fd=4))
LISTEN     0      128                        :::22                                     :::*                   users:(("sshd",pid=1145,fd=4))
LISTEN     0      128                       ::1:631                                    :::*                   users:(("cupsd",pid=1142,fd=11))
LISTEN     0      100                       ::1:25                                     :::*                   users:(("master",pid=1422,fd=14))
LISTEN     0      128                       ::1:6010                                   :::*                   users:(("sshd",pid=14957,fd=8))
[root@zzh data]#ss -natp|grep -v '^State' |cut -d" " -f1|sort|uniq -c
      1 ESTAB
     12 LISTEN
[root@zzh data]#ss -natp|awk 'NR!=1{a[$1]++}END{for(i in a)print i,a[i]}'
LISTEN 12
ESTAB 1
[root@zzh data]#ss -natp|awk 'NR!=1{print $1}'|sort|uniq -c
      1 ESTAB
     12 LISTEN
[root@zzh data]#

②去重

只有第一次遇到才会打印,去重

[root@zzh data]#vim a.txt
aa
aa
bb
cc
dd
aa
ee
bb
dd
"a.txt" [新] 9L, 27C 已写入                                                                 
[root@zzh data]#cat a.txt
aa
aa
bb
cc
dd
aa
ee
bb
dd
[root@zzh data]#awk '!line[$0]++' a.txt
aa
bb
cc
dd
ee

③统计当前连接主机数

[root@zzh data]#ss -nt
State      Recv-Q Send-Q          Local Address:Port                         Peer Address:Port              
ESTAB      0      36              192.168.246.7:22                          192.168.246.1:52744              
[root@zzh data]#ss -nt |tail -n +2|tr -s " "|cut -d " " -f5|cut -d ":" -f1 |sort|uniq -c
      1 192.168.246.1
[root@zzh data]#ss -nt|awk -F "[ :]+" 'NR!=1{print $6}'|sort|uniq -c
      1 192.168.246.1

④提取下面的字段中的 IP地址和时间

[root@zzh data]#vim test
58.87.87.99 - - [09/Jun/2020:03:42:43 +0800] "POST /wp-cron.php?doing_wp_cron=1591645363.231654882431030273437
5 HTTP/1.1" ""sendfileon
128.14.209.154 - - [09/Jun/2020:03:42:43 +0800] "GET / HTTP/1.1" ""sendfileon
64.90.40.100 - - [09/Jun/2020:03:43:11 +0800] "GET /wp-login.php HTTP/1.1"""sendfileo


#提取此字段的ip和时间

方法一:

[root@zzh data]#cat test |awk -F "]" '{print $1}'|awk '{print $1,$4}'|tr -d [
58.87.87.99 09/Jun/2020:03:42:43
128.14.209.154 09/Jun/2020:03:42:43
64.90.40.100 09/Jun/2020:03:43:11

方法二:

[root@zzh data]#cat test |awk -F"[[ ]" '{print $1,$5}'
58.87.87.99 09/Jun/2020:03:42:43
128.14.209.154 09/Jun/2020:03:42:43
64.90.40.100 09/Jun/2020:03:43:11

方法三:awk 命令提取

[root@zzh data]#cat test |awk -F"[[ ]+" '{print $1,$4}'
58.87.87.99 09/Jun/2020:03:42:43
128.14.209.154 09/Jun/2020:03:42:43
64.90.40.100 09/Jun/2020:03:43:11

方法四:sed 命令提取

[root@zzh data]#cat test
58.87.87.99 - - [09/Jun/2020:03:42:43 +0800] "POST /wp-cron.php?doing_wp_cron=1591645363.2316548824310302734375 HTTP/1.1" ""sendfileon
128.14.209.154 - - [09/Jun/2020:03:42:43 +0800] "GET / HTTP/1.1" ""sendfileon
64.90.40.100 - - [09/Jun/2020:03:43:11 +0800] "GET /wp-login.php HTTP/1.1"""sendfileo
[root@zzh data]#cat test|sed -nr "s/(.*) - - [(.*) +.*/\1\2/p"
sed:-e 表达式 #1,字符 27:未终止的“s”命令
[root@zzh data]#cat test|sed -nr "s/(.*) - - \[(.*) \+.*/\1\2/p"
58.87.87.9909/Jun/2020:03:42:43
128.14.209.15409/Jun/2020:03:42:43
64.90.40.10009/Jun/2020:03:43:11
[root@zzh data]#cat test|sed -nr "s/(.*) - - \[(.*) \+.*/\1 \2/p"
58.87.87.99 09/Jun/2020:03:42:43
128.14.209.154 09/Jun/2020:03:42:43
64.90.40.100 09/Jun/2020:03:43:11

⑤提取host.txt主机名后再放回host.txt文件

[root@zzh data]#vim host.txt
1 www.kgc.com
2 mail.kgc.com
3 ftp.kgc.com
4 linux.kgc.com
5 blog.kgc.com

方法一:

[root@zzh data]#cat host.txt
1 www.kgc.com
2 mail.kgc.com
3 ftp.kgc.com
4 linux.kgc.com
5 blog.kgc.com
[root@zzh data]#cat host.txt|awk -F"[ .]" '{print$2}'      
www
mail
ftp
linux
blog
[root@zzh data]#cat host.txt|awk -F"[ .]" '{print$2}' >>host.txt
[root@zzh data]#cat host.txt
1 www.kgc.com
2 mail.kgc.com
3 ftp.kgc.com
4 linux.kgc.com
5 blog.kgc.com
www
mail
ftp
linux
blog

方法二:

[root@zzh data]#cat host.txt|cut -d"." -f1|tr -d "[0-9 ]" >>host.txt

方法三:

[root@zzh data]#cat host.txt|sed -nr  's/[0-9] (.*)\.kgc.com/\1/p' >>host.txt

 ⑥统计/etc/fstab文件中每个文件系统类型出现的次数

[root@localhost ~]#cat /etc/fstab 
 
#
# /etc/fstab
# Created by anaconda on Tue Dec 19 00:11:27 2023
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=0ebf43c7-c647-4e61-ab4f-cf6c64fb6a0c /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
[root@localhost ~]#cat /etc/fstab |grep -v "^#"
 
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=0ebf43c7-c647-4e61-ab4f-cf6c64fb6a0c /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
[root@localhost ~]#cat /etc/fstab |grep -v "^#"|grep -v "^$"
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=0ebf43c7-c647-4e61-ab4f-cf6c64fb6a0c /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
[root@localhost ~]#cat /etc/fstab |grep -v "^#"|grep -v "^$"|awk '{print $3}'
xfs
xfs
swap
[root@localhost ~]#cat /etc/fstab |grep -v "^#"|grep -v "^$"|awk '{print $3}'|sort
swap
xfs
xfs
[root@localhost ~]#cat /etc/fstab |grep -v "^#"|grep -v "^$"|awk '{print $3}'|sort|uniq -c
      1 swap
      2 xfs

⑦统计/etc/fstab文件中每个真单词出现的次数

方法一:

[root@zzh data]#cat /etc/fstab|grep -Eo "\b[a-zA-Z]+\b"|wc -l   
46

方法二:

[root@zzh data]#cat /etc/fstab|grep -Eo "\b[[:alpha:]]+\b"|wc -l   
46

⑧提取出字符串中的所有数字

Yd$C@M05MB%9&Bdh7dq+YVixp3vpw

[root@zzh data]#echo "Yd$C@M05MB%9&Bdh7dq+YVixp3vpw"
Yd@M05MB%9&Bdh7dq+YVixp3vpw
[root@zzh data]#echo "Yd$C@M05MB%9&Bdh7dq+YVixp3vpw"|grep -o [0-9]
0
5
9
7
3

⑨ 查出/tmp/的权限,以数字方式显示

[root@zzh data]#stat /tmp
  文件:"/tmp"
  大小:4096      	块:16         IO 块:4096   目录
设备:fd00h/64768d	Inode:33554504    硬链接:17
权限:(1777/drwxrwxrwt)  Uid:(    0/    root)   Gid:(    0/    root)
环境:system_u:object_r:tmp_t:s0
最近访问:2016-11-05 23:38:36.000000000 +0800
最近更改:2024-02-05 20:12:02.037115548 +0800
最近改动:2024-02-05 20:12:02.037115548 +0800
创建时间:-
[root@zzh data]#stat /tmp|awk -F "[(/]" 'NR==4{print $2}'
1777

⑩查出用户UID最大值的用户名、UID及shell类型

[root@zzh data]#awk -F: '$3>=1000{print $1,$3}'  /etc/passwd
nfsnobody 65534
zz 1000
[root@zzh data]#awk -F: '$3>=1000{print $1,$3}'  /etc/passwd|sort -n
nfsnobody 65534
zz 1000
[root@zzh data]#awk -F: '$3>=1000{print $3,$1}'  /etc/passwd|sort -n
1000 zz
65534 nfsnobody
[root@zzh data]#awk -F: '$3>=1000{print $3,$1,$7}'  /etc/passwd|sort -n
1000 zz /bin/bash
65534 nfsnobody /sbin/nologin

提取主机名并放入原文件 

[root@zzh data]#cat b.txt
http://mail.kgc.com/index.html
http://www.kgc.com/test.html
http://study.kgc.com/index.html
http://blog.kgc.com/index.html
http://www.kgc.com/images/logo.jpg
http://blog.kgc.com/20080102.html
http://www.kgc.com/images/kgc.jpg
[root@zzh data]#cat b.txt |awk -F[/.] '{print $3}'
mail
www
study
blog
www
blog
www
[root@zzh data]#cat b.txt |awk -F[/.] '{print $3}' >>b.txt
[root@zzh data]#cat b.txt
http://mail.kgc.com/index.html
http://www.kgc.com/test.html
http://study.kgc.com/index.html
http://blog.kgc.com/index.html
http://www.kgc.com/images/logo.jpg
http://blog.kgc.com/20080102.html
http://www.kgc.com/images/kgc.jpg
mail
www
study
blog
www
blog
www

可以结合⑤一起学习哦

这些都是面试小技巧哈!欢迎各位博友来学习哈!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值