Linux的SED文本流编辑(新手必看)

1.概述

‌sed‌是Linux中的一个强大工具,被称为Stream Editor(流编辑器),也简称为sed。它是一个用于操作、过滤和转换文本内容的工具,能够结合正则表达式对文件实现快速增删改查。sed的主要功能包括过滤指定字符串、取出指定行等,是Linux系统中处理文本文件的常用命令之一。

2.使用详解

1)sed命令的作用

·取行,过滤,替换修改文件的内容

·后向引用

2)sed的格式

sed -n '3p' test.txt:取出test.txt第三行

-n:表示取消默认输出(不加-n输出全部内容)

p:表示输出

-r:sed支持拓展正则

-i:实际修改文件,放在最后(例如:-ri)

-i.bak:先备份,再修改,放在最后(例如:-ri.bak)

3)sed查找

类似grep的过滤,比grep强再可以指定行号

案例1:取出文件test.txt第5行

sed -n '5p' test.txt(使用p时才必须加-n)

案例2:取出文件test.txt第1行到第3行

sed -n '1,3p' test.txt(行号根据顺序,不可3,1)

案例3:取出文件test.txt中包含hello的行

sed -n '/hello/p' test.txt

案例4:获取test.txt中一定范围内的日志

例如202401-202408之间

sed -n '/202401/,/202408/p' test.txt

注:取范围的时候,条件尽可能精确,避免出现由于条件模糊,导致取的范围错误

案例5:只查看test.txt中第2行和第4行

sed -n '2p ; 4p' test.txt

4)sed修改、替换

案例1:把test.txt中hello修改为word

sed 's#hello#word#g' test.txt

第一二井号之间表示找谁,第二三井号表之间示修改为什么

s:表示substitute:替换

g:表示globl:全局替换(不加g,只替换每一行第一个)

注:此举只修改sed输出后的结果,实际并未修改

sed -i 's#hello#word#g' test.txt(实际修改,如果需要实际修改要加-i)

s###g 可以换为 s@@@g、s///g

案例2:备份test.txt文件为test.txt.bak(原始文件),把test.txt中hello实际修改为word

sed -i.bak 's#hello#word#g' test.txt

案例3:将test.txt文件全部内容前加<,文件全部内容后加>

sed -r 's#(.*)#<\1>#g' test.txt(后向引用也叫反向引用)

.*:表示全部

\1:表示前面(.*)中匹配到的内容,多个条件还表示取出第一组条件内容

(.*):表示条件,多个条件可以使用多个()

案例4:后向引用

1 2 3 4 5 6 7 8 9 10

上面数字为文件test.txt内容,需要将每个数字两边加上<>,例如<1>

sed -r 's#([0-9]+)#<\1>#g' test.txt

实际例子:调换test.txt中第一列和最后一列内容

root:a;1:1:root:/root:/bin/bash bin:a;2:2:bin:/bin:/sbin/nologin adm:a;3:3:adm:/var:/adm:/sbin/nologin(此为test.txt内容)

(^.)(:a.:)(.$) 解释:

.表示全部

^表示开头

^.:a这个表示从开头到:a结束即root:a

^.:a.:这个表示从开头到最后一个:即root:a;1:1:root:/root:

.$表示末尾全部即/bin/bash

最后进行分组,

第一列为rout,在:a前,即(^.)

中间组在最后一个:前,即(:a.:)

最后一列为/bin/bash,即(.*$)

3个组分别对应\1,\2,\3

调换后最终为:

sed -r 's#(^.)(:a.:)(.*$)#\3\2\1#g' test.txt

实际修改后为:

sed -ir 's#(^.)(:a.:)(.*$)#\3\2\1#g' test.txt

5)sed删除

案例一:删除test.txt的第2行(非实际删除)

sed '3d' test.txt

d:删除

案例二:删除test.txt文件中的空行和带注释的行

sed -r '/^$|#/d' test.txt

6)sed增加

案例一:在test.txt的第2行下增加一行:12345,6789

sed '3a 12345,6789' test.txt

a:append在指定行下一行增加

案例二:在test.txt的第2行上增加一行:12345,6789

sed '3i 12345,6789' test.txt

i:insert在指定行上一行增加

案例三:将test.txt的第2行替换为:12345,6789

sed '3c 12345,6789' test.txt

c:replace对指定行进行替换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值