Linux三剑客-sed

Linux三剑客-sed

1、四剑客对比

四剑客特点擅长
find查找文件查找文件,与其他命令配合
grep/egrep过滤过滤速度最快
sed过滤,取行,替换,删除替换,修改文件内容,取行
awk过滤,取行,取列,统计计算,判断,循环取列,取行,统计计算

2、命令格式图解

sed 选项 条件/动作 /etc/passwd

条件 找谁

动作 干啥

image-20221230194947419

3、常见的参数选项及说明

选项说明
-n取消默认输出,与内置命令p常用 sed命令会一行一行读,默认会都输出到屏幕上
-rsed支持扩展正则
-i修改文件内容,这个选项放在最后
-i.bak先进行备份,然后修改文件内容.这个选项放在最后
-e允许多次编辑

4、常见的内置命令及说明

内置符说明
a append在指定行后面追加文本
c replace替换执行的内容
i insert在指定行上面插入文本
d delete删除匹配到的行
p print打印匹配到内容的行,常与-n一起使用

5、查找取行案例

增删改查之查找

5.1 取出文件的第三行

sed -n '3p' /etc/passwd

5.2 取出文件的第2行到第5行

sed -n '2,5p' /etc/passwd

5.3 过滤出包含root的行

sed -n '/root/p' /etc/passwd

sed进行过滤的时候需要使用 并且里面支持基础正则

如果需要使用扩展正则需要使用sed -r选项

5.4 过滤出不包含root的行

sed -n '/root/!p' /etc/passwd
or
sed '/root/d' /etc/passwd

5.5 过滤从104开始到105的行

sed -n '/104/,/105/p' sed.txt

5.6 只显示第三行和第五行

sed -n '3p;5p' sed.txt

5.7 有规律的查找

seq 10|sed -n '1~2p'    #隔行显示
seq 10|sed -n '2~2p'    #从第二行开始

将d改成p可删除

6、替换案例

sed的修改叫做替换

sed替换格式

sed ‘#找谁#替换成什么#’ 文件 分隔符推荐是用@ # /

s substitute 替换 sub

g global 全局替换,这一行中把所有匹配到的内容都进行替换,否则只替换每一行第1个匹配的内容

6.1 把lidao替换为oldboy

sed 's#lidao#oldboy#g' sed.txt

添加-i参数直接替换文件内容
使用-i.bak 可在替换前进行备份

6.2 将oldboy替换为oldgirl并且把lidao改为li

sed -e 's#oldboy#oldgirl#g' -e 's#lidao#li#g' sed.txt

7、替换案例-进阶

后向引用

后向引用或反向引用: 适用于sed命令处理/提取一行中的某一部分.sed命令配合正则实现取列.(类似于awk取列)

使用格式

使用替换的形式 s###g

前2个井号之间通过正则与(),对数据进行分组

后面2个井号之间通过\数字,去调用前面分组的内容

整体是后面调用前面分组的内容,称之为反向引用/后向引用

应用场景: 某一行中对部分数据进行加工与处理,提取某一部分数据

7.1 配合正则给部分内容加<>

echo 12345678|sed -r 's#(1)(.*)(8)#\1<\2>\3#g'

7.2 调换/etc/passwd第1列和最后一列内容

sed -r 's#([a-z]+)(:.*:)(.*)#\3 \1#g' /etc/passwd
or
sed -r 's#^(.*)(:x.*:)(.*)$#\3 \1#g' /etc/passwd

7.3 取出ip地址

ip a s eth0|sed -nr '3 s#^([ a-z]+) ([0-9.]+)(/.*)#\2#g p'
or
hostname -I  #输出结果后面有空格

7.4 取出stat /etc/hosts中的0644

stat /etc/hosts|sed -nr '4 s#^([a-Z:]+ \()([0-9]+)(/.*)$#\2#g p'
or
stat /etc/hosts|sed -nr '4 s#^(.*\()([0-9]+)(/.*)$#\2#g p'

8、删除案例

参考5.4

9、增加案例

a append 在指定行后面追加内容

i insert 在指定行上面插入一行

c replace 替换指定行的内容

9.1 在第一行下面追加两行666

sed -r '1a 666\n666' sed.txt

9.2 在包含oldboy和lidao的行下面追加两行666

sed -r '/oldboy|lidao/a 666\n666' sed.txt

i和c案例直接将a替换即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值