第十一课预习内容

9.1 正则介绍_grep上
9.2 grep中
9.3 grep下
9.4/9.5 sed
9.6/9.7 awk

1.正则介绍_grep 上

1.1 正则表达式:它使用单个字符串来描述或匹配一系列符合某个句法规则的字符串。正则表达式通常用来检索和替换那些符合某个模式的文本内容。这是学习shell脚本的必学内容。

1.2 grep 上

1.2.1 首先来看一下grep的命令格式为:

1.2.2 一个一个参数来看一下实例:grep -c

[root@localhost /]# grep -c 'root' 1.txt
2

1.2.3 grep -i 不区分大小写过滤

[root@localhost /]# grep -i 'root' 1.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
AROOTqlkdjl43534;sdf

1.2.4 grep -n显示行号

[root@localhost /]# grep -n 'root' 1.txt
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin

1.2.5 grep -v 取反

[root@localhost /]# grep -v 'root' 1.txt //取出所有没有root的行
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
SFSDFSplsldf2323423432
AROOTqlkdjl43534;sdf
nobody:x:99:99:Nobody:/:/sbin/nologin

1.2.6 grep -r 遍历所有子目录

[root@localhost /]# grep -r 'root' /etc/
/etc/grub.d/00_header:datarootdir="/usr/share"
/etc/grub.d/00_header:export TEXTDOMAINDIR="${datarootdir}/locale"
/etc/grub.d/00_header:if loadfont `make_system_path_relative_to_its_root "${GRUB_FONT}"` ; then
/etc/grub.d/00_header:    font="`make_system_path_relative_to_its_root "${font_path}"`"
/etc/grub.d/00_header:loadfont (\$root)`make_system_path_relative_to_its_root $x`
/etc/grub.d/00_header:set theme=(\$root)`make_system_path_relative_to_its_root $GRUB_THEME`
/etc/grub.d/00_header:background_image -m stretch `make_system_path_relative_to_its_root "$GRUB_BACKGROUND"`
/etc/grub.d/01_users:    set superusers="root"
/etc/grub.d/01_users:    password_pbkdf2 root \${GRUB2_PASSWORD}
/etc/grub.d/10_linux:datarootdir="/usr/share"
/etc/grub.d/10_linux:export TEXTDOMAINDIR="${datarootdir}/locale"
/etc/grub.d/10_linux:# loop-AES arranges things so that /dev/loop/X can be our root device, but
/etc/grub.d/10_linux:	rootsubvol="`make_system_path_relative_to_its_root /`"
/etc/grub.d/10_linux:	rootsubvol="${rootsubvol#/}"
/etc/grub.d/10_linux:	if [ "x${rootsubvol}" != x ]; then
/etc/grub.d/10_linux:	    GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} ${GRUB_CMDLINE_LINUX}"
/etc/grub.d/10_linux:	bootfs="`make_system_path_relative_to_its_root / | sed -e "s,@$,,"`"
/etc/grub.d/10_linux:    if [ -z "${prepare_root_cache}" ]; then

1.2.7 grep -An 后面一般跟数字,过滤出符合要求的以下n行

[root@localhost /]# grep -A2 'root' 1.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
--
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

1.2.8 grep -Bn 过滤出符合要求以及以上n行

[root@localhost /]# grep -B2 'root' 1.txt
root:x:0:0:root:/root:/bin/bash
--
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

1.2.9 grep -Cn 过滤出符合要求以上及以下的行

[root@localhost /]# grep -C2 'root' 1.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
--
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

2 grep中 下面来介绍一下grep一些常用的示例

2.1 grep -n 'root' 1.txt 过滤出带有root的行

[root@localhost /]#cp /etc/passwd ./1.txt //拷贝一份出来用于做实验
[root@localhost /]# grep -n 'root' 1.txt //过滤出带有root的行
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin

2.2 grep -nv 'root' 1.txt //取反,过滤出没有root的行

[root@localhost /]# grep -nv 'root' 1.txt //取反,过滤出没有root的行
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
11:games:x:12:100:games:/usr/games:/sbin/nologin
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13:SFSDFSplsldf2323423432
14:AROOTqlkdjl43534;sdf
15:nobody:x:99:99:Nobody:/:/sbin/nologin
16:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
17:dbus:x:81:81:System message bus:/:/sbin/nologin
18:polkitd:x:999:998:User for polkitd:/:/sbin/nologin
19:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
20:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
21:chrony:x:998:996::/var/lib/chrony:/sbin/nologin
22:knightlai:x:1000:1000::/home/knightlai:/bin/bash

2.3 grep '[0-9]' 1.txt //过滤出带有数字的行

[root@localhost /]# grep -n '[0-9]' 1.txt //过滤出带有数字的行
1:root:x:0:0:root:/root:/bin/bash
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:operator:x:11:0:operator:/root:/sbin/nologin
11:games:x:12:100:games:/usr/games:/sbin/nologin
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13:SFSDFSplsldf2323423432

2.4 grep -v '[0-9]' 1.txt //过滤出没有数字的行

[root@localhost /]# grep -nv '[0-9]' 1.txt //过滤出没有数字的行
26:s
27:s
28:r
29:q
30:y
31:w
32:v
33:s
34:r
35:q

2.5 grep -v '^#' 1.txt //过滤出以#开始的行

[root@localhost /]# grep -n '^#' 1.txt //过滤出以#开始的行
13:#SFSDFSplsldf2323423432
14:#AROOTqlkdjl43534;sdf
19:#sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

2.6 grep -v '^#' 1.txt|grep -v '^$' //过滤出以#开始或者不以空格开始的行

[root@localhost /]# grep -n '^#' 1.txt|grep -v '^$' //过滤出以#开始或者不以空格开始的行
13:#SFSDFSplsldf2323423432
22:#sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

2.7 grep '^[^a-zA-Z]' 1.txt //不以字母开始的行

[root@localhost /]# grep '^[^a-zA-Z]' 1.txt //不以字母开始的行
#SFSDFSplsldf2323423432
1#AROOTqlkdjl43534;sdf
 #AROOTqlkdjl43534;sdf
 wwe 234
#sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
24234kjsdlfjsd
0l23$%

3.grep下

3.1 grep 'r.o' 1.txt //过滤出匹配r.o的字符一个或多个字符

[root@localhost /]# grep 'r.o' 1.txt //过滤出匹配r.o的字符一个或多个字符
rooot:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

3.2 grep 'oo*' 1.txt //过滤出oo*过滤出匹配前面一个或零个字符

[root@localhost /]# grep 'oo*' 1.txt //过滤出oo*过滤出匹配前面一个或零个字符
rooot: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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/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
#sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
knightlai:x:1000:1000::/home/knightlai:/bin/bash
user1:x:1001:1001::/home/user1:/bin/bash

3.3 grep '.*' 1.txt //过滤出所有字符

[root@localhost /]# grep '.*' 1.txt //过滤出所有字符
rooot: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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
#SFSDFSplsldf2323423432
1#AROOTqlkdjl43534;sdf

 #AROOTqlkdjl43534;sdf
 wwe 234
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

3.4 grep 'o\{2\}' 1.txt  //过滤出两个o

[root@localhost /]# grep 'o\{2\}' 1.txt  //过滤出两个o
rooot:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin

3.5 egrep 'o{2}' 1.txt //egrep可以不用转义

[root@localhost /]# egrep 'o{2}' 1.txt //egrep可以不用转义
rooot:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin

3.6 egrep 'o+' 1.txt //过滤出一个或多个字符

[root@localhost /]# egrep 'o+' 1.txt //过滤出一个或多个字符
rooot: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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
rot

3.7 egrep 'oo?' 1.txt //过滤出匹配前面一个或零个字符

[root@localhost /]# egrep 'oo?' 1.txt //过滤出匹配前面一个或零个字符
rooot: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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
rot

3.8 egrep 'root|nologin' 1.txt //过滤出root或者nologin的行

[root@localhost /]# egrep 'root|nologin' 1.txt //过滤出root或者nologin的行
rooot: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
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/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
#sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin

3.9 egrep 'oo{2}' 1.txt //过滤出大于两个o字符

[root@localhost /]# egrep 'oo{2}' 1.txt //过滤出大于两个o字符
rooot:x:0:0:root:/root:/bin/bash

4. sed上

4.1 sed是流式编辑器,是针对文档的行来操作,它比grep有着更加强大的功能,它可以查找内容替换。

   sed的命令格式为:

sed -n 'n'p filename //单引号内的n是一个数字,表示第几行。
    -n选项的作用是只显示我们要打印的行。

4.2 下面来看一下这个命令的具体用法:

4.2.1 sed -n '5'p 1.txt //打印出第5行

[root@localhost /]# sed -n '1'p 1.txt //打印出第一行
pg
[root@localhost /]# cat 1.txt
pg
q
[root@localhost /]# sed -n '1,5'p 1.txt //打印出1到5行
pg
q
rooot:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

4.2.2 sed -n '/root/'p 1.txt //查找出root的行

[root@localhost /]# sed -n '/root/'p 1.txt //查找出root的行
rooot:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

4.2.3 sed -n '/^r/'p 1.txt  sed -n 'ot$' 1.txt //以r开头的行 //以t结尾的行

[root@localhost /]# sed -n '/^r/'p 1.txt //以r开头的行
rooot:x:0:0:root:/root:/bin/bash
rot
r
r

[root@localhost /]# sed -nr '/t$/'p 1.txt //以t结尾的行
halt:x:7:0:halt:/sbin:/sbin/halt
rot
[root@localhost /]# sed -n '/t$/'p 1.txt
halt:x:7:0:halt:/sbin:/sbin/halt
rot

4.2.4 sed -n 'r..t'p 1.txt //匹配r..t中的行可以是一个或多个

[root@localhost /]# sed -n '/r..t/'p 1.txt
rooot:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

[root@localhost /]# sed -n '/r*t/'p 1.txt
rooot:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
rot

4.2.5 sed -n -e '1'p -e '/halt/'p 1.txt //匹配出第1行或者有halt的行

[root@localhost /]# sed -n -e '1'p -e '/halt/'p 1.txt//匹配出第1行或者有halt的行
pg
halt:x:7:0:halt:/sbin:/sbin/halt

5. sed下

5.1 sed不仅有过滤的功能还可以删除和查找替换

5.2 sed的实例:sed '1'd 1.txt sed '1,3'd 1.txt  sed '/nologin/'d 1.txt//删除的用法

[root@localhost /]# sed '1,3'd 1.txt //删除1到3行
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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

[root@localhost /]# sed '/nologin/'d 1.txt
pg
q
rooot:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
#SFSDFSplsldf2323423432
1#AROOTqlkdjl43534;sdf
rot
 #AROOTqlkdjl43534;sdf
 wwe 234
knightlai:x:1000:1000::/home/knightlai:/bin/bash
user1:x:1001:1001::/home/user1:/bin/bash

5.3  sed '1,6s/bin/admin/g' 1.txt //将1-6行中bin替换成admin

[root@localhost /]# sed '1,6s/bin/admin/g' 1.txt //将1-6行中bin替换成admin
rooot:x:0:0:root:/root:/admin/bash
admin:x:1:1:admin:/admin:/sadmin/nologin
daemon:x:2:2:daemon:/sadmin:/sadmin/nologin
adm:x:3:4:adm:/var/adm:/sadmin/nologin

5.4 sed 's/[0-9]//g' 1.txt sed 's/[a-zA-Z]//g' 1.txt //删除没有数字或者是字母的行

[root@localhost /]# sed 's/[0-9]//g' 1.txt
rooot:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync

[root@localhost /]# sed 's/[a-zA-Z]//g' 1.txt
::0:0::/://
::1:1::/://
::2:2::/://
::3:4:://://
::4:7::///://
::5:0::/://
::6:0::/://

5.5 sed -r 's/(root)/(.*)/(bash)/g\3\2\1' 1.txt //将root和bash调换位置

[root@localhost /]# sed -r 's/(root)(.*)(bash)/\3\2\1/' 1.txt //将root和bash调换位置
bash:x:0:0:root:/root:/bin/root

5.6 sed  's/^[a-z]/343$/' 1.txt //在小写字母前面加上343

[root@localhost /]# sed  's/^[a-z]/343$/' 1.txt //在小写字母前面加上343
343$oot:x:0:0:root:/root:/bin/bash
343$in:x:1:1:bin:/bin:/sbin/nologin
343$aemon:x:2:2:daemon:/sbin:/sbin/nologin
343$dm:x:3:4:adm:/var/adm:/sbin/nologin

5.7 sed -i 's/root/admin/g' 2.txt //直接修改文本中的内容将root改为admin

[root@localhost /]# sed -i 's/root/admin/g' 2.txt //直接修改文本中的内容将root改为admin
[root@localhost /]# cat 2.txt
admin:x:0:0:admin:/admin:/bin/bash

6.awk

6.1 awk也是流式编辑器,针对文档中的行来操作,一行一行的执行。awk兼具sed所有功能,而且更加强大。

6.2下面也是通过实例来讲解一下awk的具体的用法:

6.2.1 cat 2.txt |awk -F ":" '{print $1 "#" $3}' //截取每一行的第一段和第三段

[root@localhost /]# cat 2.txt |awk -F ":" '{print $1 "#" $3}'
admin#0
bin#1
daemon#2
adm#3
lp#4

6.2.2 awk '/bin/' 2.txt //匹配bin的所有行

        awk -F ':' '$1~/oo/'  2.txt //这里~就是匹配的意思

[root@localhost /]# awk '/bin/' 2.txt
admin:x:0:0:admin:/admin:/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

[root@localhost /]# awk -F ':' '$1~/oo/' 2.txt
root:x:0:0:root:/root:/bin/bash

6.2.3 awk -F ':' '/root/' {print $1 "#" $5} '/bin/' '{print $1 "#" $5}'  2.txt //匹配完root再匹配bin

root@localhost /]# awk -F ':' '/root/ {print $1 "#" $5} /bin/ {print $1 "#" $5}' 2.txt
root#root
root#root
bin#bin
daemon#daemon
adm#adm
lp#lp
sync#sync
shutdown#shutdown
halt#halt
mail#mail
operator#operator

6.2.4 awk -F ':' '$3>=500' 2.txt //条件操作符 第3段大于500的行加了“”是比较ASCIID码

[root@localhost /]# awk -F ':' '$3>=500' 2.txt
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
knightlai:x:1000:1000::/home/knightlai:/bin/bash
user1:x:1001:1001::/home/user1:/bin/bash


[root@localhost /]# awk -F ':' '$3>="500"' 2.txt
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
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin

6.2.5 awk -F ":" "$7!=/sboin/nologin"  2.txt //条件操作符不等于/sbin/nologin

[root@localhost /]# awk -F ':' '$7!="/sbin/nologin"' 2.txt
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
knightlai:x:1000:1000::/home/knightlai:/bin/bash
user1:x:1001:1001::/home/user1:/bin/bash

6.3 awk下

6.3.1 awk也可以使用"&&"和“||”,表示“且”和“或者” 如:awk -F ':' '$3>"1" || $3<"100"' 2.txt

[root@localhost /]# awk -F ':' '$3>"1" || $3<"100"' 2.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

6.3.2 awk内置变量

6.3.3 awk常用 的变量有OFS 、 NF、NR.OFS和-F选项有类似功能,也是用来定义分隔符的。

[root@localhost /]# awk -F ':' '{OFS="#"} {print $1,$3}' 2.txt
root#0
bin#1
daemon#2
adm#3
lp#4
sync#5
shutdown#6
halt#7

6.3.4 变量NF是多少段,$NF是最后一段的值

[root@localhost /]# head -n3 2.txt | awk -F ':' '{print NF}'
7
7
7
[root@localhost /]# head -n3 2.txt | awk -F ':' '{print $NF}'
/bin/bash
/sbin/nologin
/sbin/nologin

6.3.5 我们还可以使用NR的使用方法

[root@localhost /]# head -n3 2.txt | awk -F ':' '{print $NR}'
root
x
2
[root@localhost /]# head -n3 2.txt | awk -F ':' '{print NR}'
1
2
3

7 awk中的数学运算

7.1 可以计算某个段的总和,END表示所有的行都执行完。

[root@localhost /]# awk -F ':' '{(tot=tot+$3)};END{print tot}' 2.txt
4606

7.2 awk中还可以使用if判断

[root@localhost /]# awk -F ':' '{if($1=="root"){print $0}}' 2.txt
root:x:0:0:root:/root:/bin/bash

猜你喜欢

转载自blog.csdn.net/a1779078902/article/details/81773185