sed命令
主要用于增删改
1.行前新增
(1)根据行号
sed ‘i #####’ test.log 所有行前新增一行,内容为#####
sed -i ‘i #####’ test.log
sed ‘1 i #####’ test.log 第一行前新增一行,内容为#####
sed ‘2,5 i #####’ test.log 2-5行每行新增一行,内容为#####
sed ‘5,$ i #####’ test.log 5到最后一行新增一行,内容为#####
sed ‘$ i #####’ test.log 最后一行新增一行,内容为#####
(2)根据正则
sed ‘/ens33/i####’ test.log 包含ens33的行前新增一行,内容为#####
sed ‘/ens33|fi/i####’ test.log 包含ens33或fi的行前新增一行,内容为#####
2.行后新增
将i换成a就是行前,其他一样
3.整行替换
将i换成c就是整行替换,其他一样
sed ‘2,5 c #####’ test.log 将2-5行整体替换为一个#######
sed ‘/ens33/c####’ test.log 包含ens33的行替换为#####
sed ‘/ens33|fi/c####’ test.log 包含ens33或fi的行替换为#####
4.整行删除
将i换成d,再把内容去掉,其他一样
sed ‘1,3 d’ test.log
sed ‘/ens33/d’ test.log
5.字符串替换,插入与删除
sed ‘s/ff/####/’ test.log 把每一行第一次出现的ff换成######
sed ‘s/ff/####/2’ test.log 把每一行第二次出现的ff换成######
sed ‘s/ff/####/g’ test.log 把ff全部换成######
sed ‘s/ff/####/g[i]’ test.log 把ff全部换成######
sed ‘1,7 s/ens33/####/’ test.log 把1-7行的ens33全部换成######
sed ’ s/ens33//opt/software/’ test.log 要替换的内容含有/时,需要转义,其他都不需要
删除:把替换的内容设为空即可
sed ‘1,7 s/ens33//g’ test.log
插入:转为替换 在ens33后面插入insert
sed ‘s/ens33/ens33insert/’ test.log
awk
主要用来提取信息
1.print
{print} 每行全部内容
{print $2} 每行第二个内容
{print $1,$3} 每行第一个和第三个内容
2.分隔符
awk -F ‘sep’ ‘{print $1}’ 指定分隔符为sep 默认为空格,输出第一个内容
空格作为分割符,可以不写,下面两种意思一样
awk -F ’ ’ ‘{print $1}’ 指定分隔符为空格,输出第一个内容
awk ‘{print $1}’ 默认分隔符为空格,输出第一个内容
其他分隔符
awk -F ‘/’ ‘{print $1}’ 指定分隔符为/输出第一个内容
3.配合正则
awk -F ‘/’ ‘/regexp/{print $1}’ 找到包含regexp的行,然后以/为分隔符输出第一个内容
4.多次筛选,即两个awk语句,用|连接
awk -F ‘/’ ‘/noprefixroute ens33/{print $1}’|awk -F ’ ’ ‘{print $2}’
使用
command|awk … 或者
awk… file
示例:
获取当前虚拟机ip
方法1:ip addr|awk -F ‘/’ ‘/noprefixroute ens33/{print $1}’|awk -F ’ ’ ‘{print $2}’
方法2:ip addr>test.log
awk -F ‘/’ ‘/noprefixroute ens33/{print $1}’|awk -F ’ ’ ‘{print $2}’ test.log