首页 > 其他分享 >正则表达式

正则表达式

时间:2022-09-26 15:59:02浏览次数:43  
标签:bin sbin shell 正则表达式 nologin var root

1. grep/egrep工具

1.1 打印符合要求的行数

grep -c 'root' /etc/passwd
2

1.2 打印某个关键词的所在行时忽略大小写

[root@shell ~]# grep -i 'root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@shell ~]# grep 'root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

1.3 过滤出带有某个关键词的行,并输出行号

[root@shell ~]# grep -n 'root' /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin

1.4 打印不符合要求的行

[root@shell ~]# grep -v 'root' /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
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
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

1.5 打印某个关键词的所在行以及这行下面的两行

[root@shell ~]# grep -A2 'halt' /etc/passwd
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.6 打印某个关键词的行以及这行上面的两行

[root@shell ~]# grep -B2 'halt' /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt

 

1.7 打印某个关键词的行以及这行上下各两行

[root@shell ~]# grep -C2 'halt' /etc/passwd
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

1.8 过滤出所有包含数字的行

[root@shell ~]# grep '[0-9]' /etc/inittab
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5

 

1.9 过滤出所有不包含数字的行

[root@shell ~]# grep -v '[0-9]' /etc/inittab
# inittab is no longer used when using systemd.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
#
# To view current default target, run:
# systemctl get-default
#
# To set a default target, run:
# systemctl set-default TARGET.target
#

 

1.10 打印出所有以#开头的行

[root@shell ~]# grep '^#' /etc/inittab
# inittab is no longer used when using systemd.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
#
# To view current default target, run:
# systemctl get-default
#
# To set a default target, run:
# systemctl set-default TARGET.target
#

 

1.11 过滤掉所有以#开头的行

[root@shell ~]# cp /etc/inittab /root/1.txt
[root@shell ~]# vi 1.txt
[root@shell ~]# cat 1.txt
# inittab is no longer used when using systemd.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
#
# To view current default target, run:
# systemctl get-default
#
# To set a default target, run:
# systemctl set-default TARGET.target
#
111111111
hhhhhhhhh
[root@shell ~]# grep -v '^#' /root/1.txt
111111111
hhhhhhhhh

 

1.12 打印出所有以某个字符结尾的行

[root@shell ~]# grep 't$' /etc/inittab
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
# systemctl get-default
# systemctl set-default TARGET.target

 

1.13 打印出所有空行

[root@shell ~]# cp /etc/passwd /root/test
[root@shell ~]# vi test
[root@shell ~]# cat test
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
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
[root@shell ~]# grep '^$' test  #此处为几处空白行

1.14 过滤掉所有空行

[root@shell ~]# cat test
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
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
[root@shell ~]# grep -v '^$' test
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
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

 

1.15 过滤掉所有空行和以#开头的行

[root@shell ~]# grep -v '^#' test|grep -v '^$'
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
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

 

1.16 过滤出任意一个字符和重复字符

#  . 表示任意一个字符,r.o表示把r和o之间有一个任意字符的行过滤出来
[root@shell ~]#  grep 'r.o' test
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
# * 表示零个或多个*前面的字符。ooo*表示oo、ooo、oooo......或者更多的o
[root@shell ~]# grep 'ooo*' test
root: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
# .*表示零个或多个任意字符,空行也包含在内,它会把/root/test文件里面的所有行都匹配到
[root@shell ~]#  grep '.*' test |wc -l
36
[root@shell ~]# wc -l test
36 test
[root@shell ~]#  grep '.*' test
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
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

 

1.17 指定要过滤出的字符出现次数

[root@shell ~]# grep 'o\{2\}' /etc/passwd
root: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

1.18 过滤出一个或多个指定的字符(egrep)

[root@shell ~]# vi test.txt
[root@shell ~]# cat test.txt
aaaaaaaaaaaaaaaaaaaaaa
rot:x:0:0:rot:/rot:/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
rooot:x:0:0:/roooooot:/bin/bash
1111111111111111111111
#  过滤出一个或多个“o”。这里egrep使用的是符号+,它表示匹配1个或多个+前面的字符,这个“+”是不支持被grep直接使用的
[root@shell ~]#  egrep 'o+' test.txt
rot:x:0:0:rot:/rot:/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
rooot:x:0:0:/roooooot:/bin/bash

1.19 过滤出零个或一个指定的字符(从某个节点开始)

[root@shell ~]# egrep 'o?' test.txt
aaaaaaaaaaaaaaaaaaaaaa
rot:x:0:0:rot:/rot:/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
rooot:x:0:0:/roooooot:/bin/bash
1111111111111111111111
[root@shell ~]#
[root@shell ~]# egrep 'oo?' test.txt
rot:x:0:0:rot:/rot:/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
rooot:x:0:0:/roooooot:/bin/bash
[root@shell ~]#
[root@shell ~]# egrep 'ooo?' test.txt
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
rooot:x:0:0:/roooooot:/bin/bash
[root@shell ~]# egrep 'ooooo?' test.txt
rooot:x:0:0:/roooooot:/bin/bash

1.20 过滤出字符串1或者字符串2

[root@shell ~]# egrep 'aaa|111' test.txt
aaaaaaaaaaaaaaaaaaaaaa
1111111111111111111111

1.21 egrep中()的应用

# 使用命令“egrep 'r(oo|at)o' test.txt”把包含rooo或者rato的行过滤出来,这里用()表示一个整体
[root@shell ~]# egrep 'r(oo|at)o' test.txt
rooot:x:0:0:/roooooot:/bin/bash
另外也可以把()和其他符号组合在一起,例如(oo)+就表示1个或者多个oo
[root@shell ~]#  egrep '(oo)+' test.txt
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
rooot:x:0:0:/roooooot:/bin/bash

 

2 sed工具

2.1 打印某行

##sed命令的格式为:sed -n 'n'p filename,单引号内的n是一个数字,表示第几行。-n选项的作用是只显示我们要打印的行。
[root@shell ~]#  sed -n '1,$'p test.txt
aaaaaaaaaaaaaaaaaaaaaa
rot:x:0:0:rot:/rot:/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
rooot:x:0:0:/roooooot:/bin/bash
1111111111111111111111
[root@shell ~]#  sed -n '1,3'p test.txt
aaaaaaaaaaaaaaaaaaaaaa
rot:x:0:0:rot:/rot:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

 

2.2 打印包含某个字符串的行

[root@shell ~]# sed -n '/rooot/'p test.txt
rooot:x:0:0:/roooooot:/bin/bash
[root@shell ~]# sed -n '/^1/'p test.txt
1111111111111111111111
[root@shell ~]# sed -n '/in$/'p test.txt
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
[root@shell ~]# sed -n '/r..o/'p test.txt
rooot:x:0:0:/roooooot:/bin/bash
[root@shell ~]# sed -n '/oo*/'p test.txt
rot:x:0:0:rot:/rot:/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
rooot:x:0:0:/roooooot:/bin/bash
[root@shell ~]# sed -e '1'p -e '/111/'p -n test.txt
aaaaaaaaaaaaaaaaaaaaaa
1111111111111111111111

 

2.3 删除某些行

[root@shell ~]# sed '1'd test.txt
rot:x:0:0:rot:/rot:/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
rooot:x:0:0:/roooooot:/bin/bash
1111111111111111111111
[root@shell ~]#
[root@shell ~]# sed '1,3'd test.txt
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
rooot:x:0:0:/roooooot:/bin/bash
1111111111111111111111
[root@shell ~]#
[root@shell ~]# sed '/oot/'d test.txt
aaaaaaaaaaaaaaaaaaaaaa
rot:x:0:0:rot:/rot:/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
1111111111111111111111

 

2.4 替换字符或者字符串

[root@shell ~]# sed '1,2s/ot/to/g' test.txt  #s  /a/b/  g
aaaaaaaaaaaaaaaaaaaaaa
rto:x:0:0:rto:/rto:/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
rooot:x:0:0:/roooooot:/bin/bash
1111111111111111111111
[root@shell ~]#
[root@shell ~]# sed 's#ot#to#g' test.txt
aaaaaaaaaaaaaaaaaaaaaa
rto:x:0:0:rto:/rto:/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
rooto:x:0:0:/roooooto:/bin/bash
1111111111111111111111

 

2.5 删除文档中所有的数字或者字母

[root@shell ~]# sed 's/[0-9]//g' test.txt
aaaaaaaaaaaaaaaaaaaaaa
rot:x:::rot:/rot:/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
rooot:x:::/roooooot:/bin/bash

[root@shell ~]#
[root@shell ~]# sed 's/[a-zA-Z]//g' test.txt

::0:0::/://
::1:1::/://
::2:2::/://
::3:4:://://
::4:7::///://
::5:0::/://
::0:0:/://
1111111111111111111111

 

2.6 调换两个字符串的位置

[root@shell ~]#  sed 's/\(rot\)\(.*\)\(bash\)/\3\2\1/' test.txt
aaaaaaaaaaaaaaaaaaaaaa
bash:x:0:0:rot:/rot:/bin/rot
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
rooot:x:0:0:/roooooot:/bin/bash
1111111111111111111111
[root@shell ~]# sed -r 's/(rot)(.*)(bash)/3\2\1/' test.txt
aaaaaaaaaaaaaaaaaaaaaa
3:x:0:0:rot:/rot:/bin/rot
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
rooot:x:0:0:/roooooot:/bin/bash
1111111111111111111111

 

2.7 在某一行前后增加指定内容

[root@shell ~]# sed 's/^.*$/123&/' test.txt
123aaaaaaaaaaaaaaaaaaaaaa
123rot:x:0:0:rot:/rot:/bin/bash
123bin:x:1:1:bin:/bin:/sbin/nologin
123daemon:x:2:2:daemon:/sbin:/sbin/nologin
123adm:x:3:4:adm:/var/adm:/sbin/nologin
123lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
123sync:x:5:0:sync:/sbin:/bin/sync
123rooot:x:0:0:/roooooot:/bin/bash
1231111111111111111111111

 

2.8 直接修改文件的内容

[root@shell ~]#  sed -i 's/ot/to/g' test.txt
[root@shell ~]# cat test.txt
aaaaaaaaaaaaaaaaaaaaaa
rto:x:0:0:rto:/rto:/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
rooto:x:0:0:/roooooto:/bin/bash
1111111111111111111111

3 awk工具

3.1 截取文档中的某个段

####将文件的前两行以:分隔,打印第一段。-F选项的作用是指定分隔符。如果不加-F选项,则以空格或者tab为分隔符。print为打印的动作,用来打印某个字段。$1为第一个字段,$2为第二个字段,以此类推。但$0比较特殊,它表示整行。

[root@shell ~]#  head -n2 test.txt |awk -F ':' '{print $1}'
aaaaaaaaaaaaaaaaaaaaaa
rto
[root@shell ~]#  head -n2 test.txt |awk -F ':' '{print $0}'
aaaaaaaaaaaaaaaaaaaaaa
rto:x:0:0:rto:/rto:/bin/bash

[root@shell ~]# head -n2 test.txt |awk -F ':' '{print $1"#"$2"#"$3"#"$4}'
aaaaaaaaaaaaaaaaaaaaaa###
rto#x#0#0

 

3.2 匹配字符或者字符串

[root@shell ~]# awk '/oo/' test.txt
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
rooto:x:0:0:/roooooto:/bin/bash

[root@shell ~]#  awk -F ':' '$1 ~/oo/' test.txt
rooto:x:0:0:/roooooto:/bin/bash

[root@shell ~]# awk -F ':' '/rooot/ {print $1,$3} /sync/ {print $2,$4}' test.txt
x 0

 

3.3 条件操作符

[root@shell ~]# awk -F ':' '$3>="500"' /etc/passwd
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
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
[root@shell ~]#
[root@shell ~]# awk -F ':' '$3>=500' /etc/passwd
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
[root@shell ~]#
[root@shell ~]# awk -F ':' '$7!="/sbin/nologin"' /etc/passwd
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
[root@shell ~]#
[root@shell ~]#
[root@shell ~]# awk -F ':' '$3<$4' /etc/passwd
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
[root@shell ~]#
[root@shell ~]# awk -F ':' '$3>"5" && $3<"7"' /etc/passwd
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
[root@shell ~]#
[root@shell ~]# awk -F ':' '$3>1000 || $7=="/bin/bash"' /etc/passwd
root:x:0:0:root:/root:/bin/bash

 

3.4 awk的内置变量

3.4.1 变量OFS的用法

[root@shell ~]# head -5 /etc/passwd |awk -F ':' '{OFS="#"} {print $1,$3,$4}'
root#0#0
bin#1#1
daemon#2#2
adm#3#4
lp#4#7
[root@shell ~]# awk -F ':' '{OFS="#"} {if ($3>500) {print $1,$2,$3,$4}}' /etc/passwd
polkitd#x#999#998
chrony#x#998#996

 

3.4.2 变量NF的用法

[root@shell ~]# head -n3 /etc/passwd | awk -F ':' '{print NF}'
7
7
7
[root@shell ~]#
[root@shell ~]# head -n3 /etc/passwd | awk -F ':' '{print $NF}'
/bin/bash
/sbin/nologin
/sbin/nologin

 

3.4.3 变量NR的用法

[root@shell ~]# head -n3 /etc/passwd | awk -F ':' '{print NR}'
1
2
3
[root@shell ~]#
[root@shell ~]#
[root@shell ~]# awk 'NR>10' /etc/passwd
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
[root@shell ~]#
[root@shell ~]#
[root@shell ~]# awk -F ':' 'NR<20 && $1 ~ /roo/' /etc/passwd
root:x:0:0:root:/root:/bin/bash

 

3.5 awk中的数字运算

3.5.1 更改段值

[root@shell ~]#  head -n 3 /etc/passwd | awk -F ':' '$1="root"'
root x 0 0 root /root /bin/bash
root x 1 1 bin /bin /sbin/nologin
root x 2 2 daemon /sbin /sbin/nologin

 

3.5.2 计算某个段的总和

[root@shell ~]# awk -F ':' '{(tot=tot+$3)}; END {print tot}' /etc/passwd
2605

 

3.5.3

[root@shell ~]#  awk -F ':' '{if ($1=="root") {print $0}}' /etc/passwd
root:x:0:0:root:/root:/bin/bash

标签:bin,sbin,shell,正则表达式,nologin,var,root
From: https://www.cnblogs.com/hohonb/p/16731175.html

相关文章