字符处理三剑客
1. sed命令
#擅长增删改查 替换
选项:
-n #取消默认输出
-r #支持扩展正则使用
-i #改变文件内容
-e #允许多项编辑
内部指令:
p #print 打印
d # 删除 排除
a #追加 将内容追加指定内容的后面
i #插入 将内容插入到指定的内容的前面
s #替换
g #全局
i #忽略大小写
查 过滤
[root@qls ~]# sed -n '/root/p' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
roottttt
[root@qls ~]# sed -n '/^root/p' passwd
root:x:0:0:root:/root:/bin/bash
roottttt
[root@qls ~]# sed -nr '/root|sshd/p' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
roottttt
#打印不连续的内容
[root@qls ~]# sed -n '/sync/p;/mail/p' passwd
sync:x:5:0:sync:/sbin:/bin/sync
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
#打印某个字符串到某个字符串的所有内容
[root@qls ~]# sed -n '/sync/,/mail/p' passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
#打印单行
[root@qls ~]# sed -n '1p' passwd
root:x:0:0:root:/root:/bin/bash
#打印连续的行
[root@qls ~]# sed -n '1,3p' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
#打印不连续的行
[root@qls ~]# sed -n '1p;3p' passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@qls ~]# sed -n '1,3p' passwd
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
删 排除
#删除包含root字符串的行
[root@qls ~]# sed '/root/d' 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
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
ROOT
#删除不连续的字符串 删除多个字符串
[root@qls ~]# sed '/root/d;/lp/d' 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
sync:x:5:0:sync:/sbin:/bin/sync
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
#删除连续的字符串
[root@qls ~]# sed '/adm/,/games/d' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
#删除单行
[root@qls ~]# sed '1d' passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
#删除连续的行
[root@qls ~]# sed '1,10d' passwd
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
#删除不连续的行
[root@qls ~]# sed '1d;10d' 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
#删除第一行到最后一行 $ 表示结尾
[root@qls ~]# sed '1,$d' passwd
[root@qls ~]#
#真正改变了文件的内容
[root@qls ~]# sed -i '1,10d' passwd
[root@qls ~]# cat passwd
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
增 添加内容到文件中
a 追加
#将内容追加第五行的后面
[root@qls ~]# sed '5aoldboy' passwd
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
#将内容追加到文件的底部
[root@qls ~]# sed '$aoldboy' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
#追加多行内容到文件中 \n 换行符 \t tab键
[root@qls ~]# sed '10aoldboy\noldgirl' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@qls ~]# sed -i '$aoldboy' passwd
[root@qls ~]# tail -1 passwd
oldboy
#根据字符串进行追加内容
[root@qls ~]# sed '/sshd/aoldboy' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
i 插入
#在第一行的前面插入内容
[root@qls ~]# sed '1ioldboy' passwd
oldboy
root:x:0:0:root:/root:/bin/bash
root:/sbin/nologin
oldboy
#在最后一行的前面插入内容
[root@qls ~]# sed '$iold' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
#插入多行内容
[root@qls ~]# sed '1ioldboy\noldgirl' passwd
oldboy
oldgirl
root:x:0:0:root:/root:/bin/bash
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
oldboy
[root@qls ~]# sed '/root/inew' passwd
new
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
new
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologi
oldboy
[root@qls ~]# sed '/root/aold' passwd | sed '/sshd/illl'
root:x:0:0:root:/root:/bin/bash
old
bin:x:1:1:bin:/bin:/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
SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy
[root@qls ~]# sed -e '/root/aold' -e '/sshd/illl' passwd
root:x:0:0:root:/root:/bin/bash
old
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
改 替换
s 替换 g 全局 i 忽略大小写
#全局替换
[root@qls ~]# sed 's#root#admin#g' passwd
admin:x:0:0:admin:/admin:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
#针对某一行进行替换
[root@qls ~]# sed '1s#root#admin#g' passwd
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
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
oldboy
#替换多行内容
[root@qls ~]# sed '1,10s#root#admin#g' passwd
admin:x:0:0:admin:/admin:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy
#替换的时候,忽略大小写
[root@qls ~]# echo "ROOT" >>passwd
[root@qls ~]#
[root@qls ~]# cat passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@qls ~]# sed 's#root#admin#g' passwd
admin:x:0:0:admin:/admin:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@qls ~]# sed 's#root#admin#gi' passwd
admin:x:0:0:admin:/admin:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
#替换第10行到最后一行的内容
[root@qls ~]# sed '10,$s#root#admin#gi' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/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
oldboy
admin
#满足包含root字符串行,再进行替换操作
[root@qls ~]# sed '/root/s#bin#oldboy#g' passwd
root:x:0:0:root:/root:/oldboy/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
#满足以root开头的行 再进行替换操作
[root@qls ~]# sed '/^root/s#bin#oldboy#g' passwd
root:x:0:0:root:/root:/oldboy/bash
bin:x:1:1:bin:/bin:/sbin/nologin
#在每个root后面加上一个abc
[root@qls ~]# sed 's#root#rootabc#g' passwd
rootabc:x:0:0:rootabc:/rootabc:/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:/rootabc:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
#给文件的每一行前面加上注释 #
[root@qls ~]# sed 's#^#\##g' passwd
#root:x:0:0:root:/root:/bin/bash
#bin:x:1:1:bin:/bin:/sbin/nologin
#sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
#postfix:x:89:89::/var/spool/postfix:/sbin/nologin
#oldboy
#ROOT
#把所有的#删除掉
[root@qls ~]# sed 's#\###g' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy
ROOT
#将某个字符串全部删除
[root@qls ~]# sed 's#root##g' passwd
:x:0:0::/:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy
ROOT
#排除空行 删除空行
[root@qls ~]# cp /etc/ssh/sshd_config ./
^ #以什么开头
$ #以什么为结尾
^$ #空行 排除有空格或者tab键的空行
[root@qls ~]# grep -v '^$' sshd_config
# $OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $
# This is the sshd server system-wide configuration file.
[root@qls ~]# sed '/^$/d' sshd_config
# $OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $
# This is the sshd server system-wide configuration file. See
#后向引用 () 扩展正则
前期定义 后期调用 \1 \2 第一个括号里面的内容 用 \1 第二个括号就是\2
[root@qls ~]# sed -r '8s#(.*)#\1 oldboy#g' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
oldboy
ROOT```
#取IP地址
[root@qls ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::3310:9d15:9ee4:43e8 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:eb:ea:8d txqueuelen 1000 (Ethernet)
RX packets 12703 bytes 1441173 (1.3 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8645 bytes 925660 (903.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@qls ~]# ifconfig eth0 | sed -n '2p'
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
[root@qls ~]# ifconfig eth0 | sed -n '2p' | sed -r 's#(^.*et )(.*)( n.*$)#\2#g'
10.0.0.100
[root@qls ~]# ifconfig eth0 | sed -n '2p' | sed -r 's#(^.*et )(.*)( n.*$)#\1#g'
inet
[root@qls ~]# ifconfig eth0 | sed -n '2p' | sed -r 's#(^.*et )(.*)( n.*$)#\3#g'
netmask 255.255.255.0 broadcast 10.0.0.255
[root@qls ~]# ifconfig eth0 | sed -nr '2s#(^.*et )(.*)( n.*$)#\2#gp'
10.0.0.100
[root@qls ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:eb:ea:8d brd ff:ff:ff:ff:ff:ff
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::3310:9d15:9ee4:43e8/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@qls ~]# ip a s eth0 | sed -n '3p'
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@qls ~]# ip a s eth0 | sed -n '3p' | sed -r 's#(^.*t )(.*)(/.*$)#\2#g'
10.0.0.100
[root@qls ~]# ip a s eth0 | sed -nr '3s#(^.*t )(.*)(/.*$)#\2#gp'
10.0.0.100
#将passwd文件中的第一列与第七列的位置进行调换
[root@qls ~]# sed -nr 's#(.*)(:x.*:)(.*)#\3\2\1#gp' passwd
/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:81:81:System message bus:/:dbus
/sbin/nologin:x:999:998:User for polkitd:/:polkitd
/sbin/nologin:x:74:74:Privilege-separated SSH:/var/empty/sshd:sshd
/sbin/nologin:x:89:89::/var/spool/postfix:postfix
#打印行号
[root@qls ~]# sed = passwd
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
2. awk命令
擅长取列 计算 数组 函数 编程语言
内部命令 内部变量
NR #行号
$0 #完整的一行内容
$n # n 是数字 表示取出第几列 多列用逗号分割
-F #FS 分隔符的变量
NF #最后一列 为第几列
$NF #显示最后一列的内容
查 过滤
[root@qls ~]# awk '/root/' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@qls ~]# awk '/root/;/adm/' passwd
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@qls ~]# awk '/root|adm/' passwd
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@qls ~]# awk '/adm/,/mail/' passwd
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
[root@qls ~]# awk 'NR==1' passwd
root:x:0:0:root:/root:/bin/bash
[root@qls ~]# awk 'NR==1,NR==3' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@qls ~]# awk 'NR==1;NR==3' passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@qls ~]# awk 'NR>10' 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
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
[root@qls ~]# awk 'NR<=2' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@qls ~]# awk 'NR>=15' passwd
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
&& #并且
[root@qls ~]# awk 'NR>10 && NR<16' 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
|| #或者
[root@qls ~]# awk 'NR<3 || NR>15' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/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
#打印整个文件内容
[root@qls ~]# awk '{print $0}' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/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
#给文件内容加上行号
[root@qls ~]# awk '{print NR,$0}' passwd
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
#取反 排除
! 取反 排除
[root@qls ~]# awk '!/sbin/' passwd
root:x:0:0:root:/root:/bin/bash
[root@qls ~]# awk 'NR!=1' 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
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
#排除了第5行到第15行
[root@qls ~]# awk 'NR<5 || NR >15' passwd
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
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
# 取列
[root@qls ~]# awk -F: '{print $1}' passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
[root@qls ~]# awk -F: '{print $1,$2}' passwd
root x
bin x
daemon x
adm x
lp x
[root@qls ~]# awk -F: '{print $NF}' passwd
/bin/bash
/sbin/nologin
/sbin/nologin
$(NF-1) 倒数第二列
[root@qls ~]# awk -F: '{print $(NF-1)}' passwd
/root
/bin
/var/empty/sshd
/var/spool/postfix
[root@qls ~]# awk -F '[:]' '{print $1}' passwd
root
bin
daemon
adm
#默认分隔符为 空白字符
[root@qls ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::3310:9d15:9ee4:43e8 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:eb:ea:8d txqueuelen 1000 (Ethernet)
RX packets 15508 bytes 1698801 (1.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 10471 bytes 1145384 (1.0 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@qls ~]# ifconfig eth0 | awk 'NR==2'
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
[root@qls ~]# ifconfig eth0 | awk 'NR==2' | awk '{print $2}'
10.0.0.100
[root@qls ~]# ifconfig eth0 | awk 'NR==2{print $2}'
10.0.0.100
#指定多个分隔符
[root@qls ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:eb:ea:8d brd ff:ff:ff:ff:ff:ff
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::3310:9d15:9ee4:43e8/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@qls ~]# ip a s eth0 | awk 'NR==3'
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@qls ~]# ip a s eth0 | awk 'NR==3' | awk -F '[ /]' '{print $6}'
10.0.0.100
[root@qls ~]# ip a s eth0 | awk 'NR==3' | awk -F '[ /]*' '{print $3}'
10.0.0.100
[root@qls ~]# echo " // inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0" >ip.txt
[root@qls ~]# cat ip.txt
// inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@qls ~]# awk -F '[ /]' '{print $11}' ip.txt
10.0.0.100
[root@qls ~]# awk -F '[ /]*' '{print $3}' ip.txt
10.0.0.100
#指定分隔符 使用双引号引起来
[root@qls ~]# awk -F: '{print $1":"$2}' passwd
root:x
bin:x
daemon:x
[root@qls ~]# awk -F: '{print $1"脱产10期"$2}' passwd
root脱产10期x
bin脱产10期x
postfix脱产10期x
[root@qls ~]# awk -F: '{print $NF":"$2":"$3":"$4":"$5":"$6":"$1}' passwd
/bin/bash:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin
/sbin/nologin:x:2:2:daemon:/sbin:daemon
**3. grep命令**
grep #过滤 给过滤出来的内容加上颜色
选项:
-n #给过滤出来的内容加上此行所在文件的行号
-i #忽略大小写
-c #统计的是行数 包含过滤字符串的行数
-v #排除 删除 取反
-o #只显示过滤出来的内容
-w #精确匹配 只匹配你要过滤的字符串,而不是过滤包含此字符串的字符串
-r #递归过滤 过滤多个文件 针对目录操作
-A #匹配过滤出来的内容向下多少行 后面加正整数
-B #匹配过滤出来的内容向上多少行
-C #匹配过滤出来的内容各向上向下多少行
-E #支持扩展正则使用 === egrep
^ #以什么开头
$ #以什么为结尾
^$ #空行 排除存在空格或者tab键的空行
. #匹配除换行符以外的任意一个字符
* #匹配前面的字符出现0次或者0次以上
.* #所有
| #或者 扩展正则