Linux 高级命令sed和awk
sed
1、 sed命令:行操作命令,一次处理一行数据,默认情况下不改变原始行。适合于处理大型文件。
2、 语法:sed 选型 ‘sed命令’ 文件名
sed ‘s/root/ROOT/g’ pp.txt
选项:-e同时操作多项
sed -e ‘s/root/ROOT/g’ -e ‘s/bash/BASH/g’ pp.txt
3、 sed命令
d删除
sed ‘1d’ pp.txt
sed ‘1,6d’ pp.txt
sed ‘3,10d’ pp.txt
sed '4,
d
′
p
p
.
t
x
t
s
e
d
‘
d' pp.txt sed ‘
d′pp.txtsed‘d’ pp.txt
sed ‘/halt/d’ pp.txt
sed ‘/^$/d’ pp.txt
s查找替换
sed ‘s/games/YOUXI/’ pp.txt
sed ‘s/games/YOUXI/2’ pp.txt
sed ‘s/games/YOUXI/g’ pp.txt
sed ‘7s/games/YOUXI/’ pp.txt
sed ‘7s/games/YOUXI/2’ pp.txt
sed ‘7s/games/YOUXI/g’ pp.txt
ifconfig ens32|sed -n ‘/inet/p’|sed ‘2d’|sed ‘s/^.inet//’|sed 's/netmask. / / ′ i f c o n f i g e n s 32 ∣ s e d − n ′ / i n e t / p ′ ∣ s e d ′ 2 d ′ ∣ s e d ′ s / . ∗ i n e t / I P A d d r e s s : / ′ ∣ s e d ′ s / n e t m a s k . ∗ //' ifconfig ens32|sed -n '/inet/p'|sed '2d'|sed 's/^.*inet/IPAddress:/'|sed 's/netmask.* //′ifconfigens32∣sed−n′/inet/p′∣sed′2d′∣sed′s/.∗inet/IPAddress:/′∣sed′s/netmask.∗//’
y字符转换
sed ‘y/987/NYE/’ pp.txt
i插入文本
sed ‘2 i 123123123123’ pp.txt
ifconfig ens32|sed -n ‘/inet/p’|sed ‘2d’|sed ‘s/^.inet//’|sed 's/netmask.$//’|awk ‘{print $1}’|sed ‘1 i IPAddress:’
a追加文本
sed ‘2 a 123123123123’ pp.txt
sed ‘/<games>/i918234913491347’ pp.txt
sed ‘/<games>/a918234913491347’ pp.txt
sed ‘/<games>/a123\n123\n123\n’ pp.txt
c取代
sed ‘2c aaaaaaaaaaaaaaaa’ pp.txt
sed ‘1,9c aaaaaaaaaaaaaaaa’ pp.txt
sed ‘/dbus/c 1782396192346192’ pp.txt
r读取
sed ‘10r /etc/shadow’ pp.txt
sed ‘/9dbus/r /etc/hosts’ pp.txt
p显示,挂n
sed -n ‘2p’ pp.txt
sed -n ‘/games/p’ pp.txt
sed -n ‘/[A-Z]/p’ pp.txt
选项f调用脚本
cat pp.rule
s/bus/BUS/g
11d
/^$/d
sed -f pp.rule pp.txt
选型i直接修改原文件
sed -i ‘s/bus/BUS/g’ pp.txt
awk使用手册
数据处理工具,基于列为操作单位,行视为一条记录,列称为记录的字段,awk抽取列信息。自定义变量,也可以在内部条件判断、循环结构、数组、正则等,awk自成体系。
awk默认是空格作为分隔符,形成字段,也称为域,从左到右,称为第一个域$1,第二个域$2,以此类推。$0表示全部域。
1、 执行操作
awk 选项 ‘awk命令’ 文件
2、 直接执行、脚本、写入到文件里。
3、 正则表达式
awk '/^[a-z]/' pp.txt
布尔表达式
awk '$1 < 5 {print $1,$2}' kk.txt
awk '($2 > 10) && ($2 < 200) {print $1,$2,$3}' kk.txt
awk '($2 > 10) && ($2 < 200) {print $1+$2}' kk.txt
4、 列操作
awk -F: '($3 == 0) {print $1,$3}' /etc/passwd
awk -F: '($3 == 0) {print $1,$3,$7}' /etc/passwd
awk -F: '($3 == 0) {print $1","$3","$7}' /etc/passwd
awk -F: '($3 == 0) {print $1 "\t"$3 "\t" $7}' /etc/passwd
awk -F: '/^root/ {print $1,$3,$7}' /etc/passwd
awk -F: '($3 > 0) && ($3 < 1000 ) {print $1,$3,$7}' /etc/passwd
查看系统用户
awk -F: '($3 == 0) || ($3 > 1000 ) {print $1,$3,$7}' /etc/passwd
查看可以登录的用户
awk -F: '($3 == 0) {print $1,$3,$7}' /etc/passwd
查看超级权限用户
awk -F: 'NR==23,NR==33 {print $1,$3,$7}' /etc/passwd
思考:提取网卡、IP、子网掩码、默认网关
ifconfig|grep -B1 '\<inet\>'|awk '{print $1,$2}'|awk -F: '{print $1}'|sed 's/inet//g'
route -n|awk '/^(0.0.0.0)/ {print $2 }'
暂时简陋版,后期在附图