sed、awk、grep

1、sed命令

1、基础

1、常见的模式
选项作用
-n预想模式,不输出所有的内容,输出操作的内容
-e可以执行多个命令-e,-e
-r可以使用正则表达式
-f可以使用脚本
-i对源文件进行修改
2、常见的动作
动作作用
a在匹配的行后添加
i在匹配的行前添加
d删除指定的行
c修改指定的行,也就是一整行
s替换一些关键字,g全局替换
p打印指定的行
!取反的动作
w另存为
I忽略大小写
3、地址定界
符号作用
#表示数字,指定操作的行数
$表示最后一行
/字/通过匹配关键字,可以结合正则,大写的I忽略大小写
#1,#2指定范围的行数
first~step1~2,从第一行开始以2为步长
addr1,+N匹配addr1行,以及后面的N行
addr1,-N匹配addr1行到N行

案例

1、常规匹配
#匹配特殊字符,匹配/bin/bash或者/root这2个字都显示出来,行的形式来形式出来
#格式为 \%字%动作
[root@master ~]# sed -n '\%/bin/bash%,\%/root%p' passwd 
q:x:1000:1000:q:/home/q:/bin/bash
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
ROOT:qqq:sdsad:/bin/bash111

#匹配root这个字
[root@master ~]# sed -n '/root/p' passwd 
root:x:0:0:root:root:bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin/root
daemon:x:2:2:daemon:/sbin:/sbin/nologin/root
operator:x:11:0:operator:/root:/sbin/nologin

#匹配1到3行
[root@master ~]# sed -n '1,3p' passwd 
root:x:0:0:root:root:bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin/root
daemon:x:2:2:daemon:/sbin:/sbin/nologin/root

#使用正则表达式来匹配,模式要带上r才行
#匹配以root开头或者lp开头的字显示出来
[root@master ~]# sed -nr '/^root/,/^lp/p' passwd 
root:x:0:0:root:root:bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin/root
daemon:x:2:2:daemon:/sbin:/sbin/nologin/root
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
2、修改
#在第一行后面一行添加qqq
sed -i '1a\qqq\' passwd
#在第二行前面添加aaaa
sed -i '2i\aaaa\' passwd

#匹配qqqq字的后一行添加字段,注意是\\的,//这样的话,会将//添加进去
[root@master ~]# sed -i '/qqqq/a\ttttt\' passwd

#将root替换为tttt,全局的替换
[root@master ~]# sed -i 's/root/tttt/g' passwd

#替换第一行的第二个root为tt
[root@master ~]# sed -i 's/root/tt/2' passwd

#将第四行的第一个root替换成ttt
[root@master ~]# sed -i '4s/root/ttt/' passwd

#替换/qqqq/字变成空
[root@master ~]# sed -i 's/\/qqqq\///g' passwd

#删除空行
[root@master ~]# sed -ir '/^$/d' passwd 

#将匹配到/oooo/整行修改
[root@master ~]# sed -i '/\/oooo\//c\rrrrr\' passwd

2、grep命令

1、常见的选项

选项作用
-i忽略大小写
-o只打印匹配出的关键字
-n打印出行数
-c打印出匹配的总行数
-q静默输出,不输出任何的信息,用$?判断即可
-v取反,取出相反的结果
-r递归的搜索,显示文件和文件内容
-l只显示文件,不显示内容
-Ax只显示匹配行数的后几行,after
-Bx显示匹配行数的前几行,before
-Cx显示匹配到到行数的上下几行
–color对于匹配到内容高亮显示
1、案例
[root@controller mnt]# grep -rl root /etc/passwd
/etc/passwd

# -r 递归的进行搜索
[root@controller mnt]# grep -r root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

2、正则的选项

符号作用
^以这个开头
$以这个结尾的
<以这个字开头的字
>以这个字结尾的字
.匹配着单个字符
[abc]匹配abc中的任意一个字符
[^abc]不匹配abc中的任意一个字符
|取消后面单个字符的特殊含义
*对前面的字符进行0次或者多次匹配
.*匹配所有的字符(后面的),匹配任意字符0次或者多次
1、案例
# 匹配的是字,所以的话,如果连在了一起的,就匹配不到了
[root@controller mnt]# cat 11.txt 
qqqwroo
wwrootwrroot
eeewro
root
rrr:root
rootroot
[root@controller mnt]# grep "\<root\>" 11.txt 
root
rrr:root

# <\root 以这个root开头的

# root\> 以这个root结尾的

3、扩展正则

  • 使用grep -E 或者egrep即可

  • 使用这些符号的时候带上单引号,即可

符号作用
+对前面一项进行匹配1次或者多次
?对前面一项匹配0次或者1次
{j}对前面一项匹配j次
{,j}对前面一项最多匹配j次
{j,}对前面一项至少匹配j次
{j,k}对前面一项至少匹配j次,最多匹配k次
a|b可以匹配a或者b
(exp)就是将exp作为一个整体来进行匹配
[root@controller mnt]# ifconfig ens160|grep netmask | egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}"|egrep -v  "^255|255$"
192.168.200.10

[root@controller mnt]# ifconfig ens160|grep netmask | awk '{print $2}'
192.168.200.10

3、awk命令

[root@controller mnt]# ifconfig ens160 | grep netmask | awk '{print $2}'
192.168.200.10


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值