sed高级应用与awk基本用法

sed 
前置命令  | sed 选项  (定址符)指令
sed 选项  (定址符)指令  被处理的文件

选项  -n   -r   -i
指令  p    d    s

a  行下追加
i  行上添加
c  替换行

sed '1a XXXX' user      第1行下追加字母
sed '1,3a XXXX' user    第1~3行下追加
sed '1,+1a XXXX' user   第1行以及后面1行下追加
sed '/root/a XXXX' user   有root的行下追加
sed '1i XXXX' user          第1行上添加
sed '1a XXXX' user          第1行下追加
sed '2i XXXX' user       效果同上
sed '/^bin/i XXXX' user   以bin开头的行上添加
sed 'c XXXX' user        所有行替换
sed '1c XXXX' user          第1行替换
sed '1,2c XXXX' user     第1~2行替换
sed '/root/c XXXX' user   有root的行替换
------------------------------------------------------------------------------------
按照 用户名 --> 密码 的格式,显示使用bash做解释器的用户信息

#!/bin/bash
u=`sed -n '/bash$/s/:.*//p' /etc/passwd`  找到使用bash的用户
for i in $u    交给for循环处理
do
    w=`grep "$i:" /etc/shadow`  找到每个用户对应的shadow记录
    w1=${w#*:}     掐头
    w2=${w1%%:*}   去尾 得到纯粹的密码信息
    echo "$i --> $w2"
done

--------------------------------------
vim
grep
sed  
awk  逐行处理
使用方式:
1, 前置命令 | awk 选项  (条件)指令
2,awk 选项  (条件)指令 被处理文件

选项  -F 定义分隔符
指令  print 输出

awk '{print}' test     输出所有行所有列
awk '{print $1}' test   输出所有行第1列
awk '{print $2}' test   输出所有行第2列
awk '{print $1,$2}' test   输出所有行第1列 第2列
awk '{print $3,$1}' test   输出所有行第3列 第1列
awk '{print $0}' test      输出所有行所有列
awk '{print $3,$0}' test   输出所有行第3列 所有列
awk '{print $4}' test       文件中没有第4列,无输出
awk -F: '{print $1}' user  定义:作为分隔符,然后输出第1列
awk -F[:/] '{print $1}' user  定义:或者/作为分隔符

awk内置变量  $0 $1 $2 ...   NR行   NF列

ifconfig eth0 |awk '/RX p/{print $4,$5}'   找到网卡信息中的接收流量

awk -F: '{print $1"的解释器是"$7}' user   awk可以加双引号输出常量
awk -F: '{print $1"的家目录是"$6}' user 

ifconfig eth0 | awk '/RX p/{print "eth0网卡接收的流量是"$5"字节"}'
ifconfig eth0 | awk '/TX p/{print "eth0网卡发送的流量是"$5"字节"}'

如何输出"根分区剩余容量是XXX"
df -h | awk '/\/$/{print "根分区剩余容量是"$4}'

找到对本机访问失败(密码输错)的ip地址
awk '/Failed/{print $11}' /var/log/secure

-----------------------------------------------------------------
逐行任务,执行n次
awk  [选项]  '[条件]{指令}'  文件

BEGIN,END 额外的任务,执行1次
awk  [选项]  ' BEGIN{指令} {指令} END{指令}'  文件

tab 制表符   \t  在输出过程中起到一定的排版效果

按一定格式输出用户信息:
awk -F: 'BEGIN{print "USER\tUid\tHome"}{print$1"\t"$3"\t"$6}END{print "总计"NR"行"}' user

-----------------------------------------------------------------------------------------------
awk的条件

1,使用正则作为条件:
awk '/root/{print}' user    输出有root的行,print可以省略
awk '/root|bin/{print}' user   输出有root或者bin的行
awk '/^root|^bin/{print}' user 输出以root开头或bin开头的行
awk '/^root|^bin/' user   效果同上
awk -F: '$1~/root/{print}' user  输出第1列包含root的行
awk -F: '$1~/root/' user   效果同上
awk -F: '$6~/root/' user  输出第6列包含root的行
awk -F: '$1!~/root/' user 输出第1列不包含root的行

2,数字或者字符串作为条件
==  !=   >  <   >=  <=

awk 'NR==2' user     输出第2行
awk -F: '$1=="root"' user   输出第1列是root的行
awk -F: '$1~/root/' user    输出第1列包含root的行
awk -F: '$1!="root"' user   输出第1列不是root的行
awk 'NR>2' user     输出大于2的行
awk 'NR>=2' user    输出大于等于2的行
awk 'NR<2' user     ...
awk 'NR<=2' user    ...
awk -F: '$3<=10' /etc/passwd   输出第3列小于等于10的行

---------------------------------------------
3, 逻辑组合
&& 并且      || 或者
awk 'NR>=1&&NR<=3' user  输出1~3行
awk -F: '$3>=10&&$3<=20' /etc/passwd  输出第3列是10~20的行
awk -F: '$3<=5||$3>=1000' /etc/passwd 输出第3列小于等于5或者大于等于1000的行
awk -F: '$3<10||$3>1000' /etc/passwd 输出第3列小于10或者大于1000的行 
awk -F: '$3<10&&$3>1000' /etc/passwd  不存在的数字,逻辑错误

输出/etc/hosts文件内以127或172开头的记录 
awk -F. '$1==127||$1==172' /etc/hosts

4,运算

列出100以内整数中7的倍数或是含7的数 
seq 100 | awk '$1%7==0||$1~/7/'

awk 'BEGIN{print 1+1}'  加
awk 'BEGIN{print 1-1}'    减
awk 'BEGIN{print 2*2}'    乘
awk 'BEGIN{print 2/2}'    除
awk 'BEGIN{print 2%2}'    取余数
awk 'BEGIN{a=10;print a}'  定义变量,然后输出
awk 'BEGIN{a=10print a}'  报语法错误
awk 'BEGIN{a=10;a++;print a}'  定义变量,运算,再输出
awk 'BEGIN{a=10;a++;print a+=10}' 定义变量,运算,输出时再运算
-----------------------------------------------------------------------
使用awk按 用户名 --> 密码 的格式输出使用bash的用户
#!/bin/bash
u=`awk -F: '/bash$/{print $1}' /etc/passwd`
for i in $u
do
    grep $i /etc/shadow | awk -F: '{print $1"-->"$2}'
done

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值