Linux sed 命令

本文深入解析SED文本处理命令,涵盖基本语法、选项与动作说明,包括数据的选取、替换、删除和新增操作。通过实例演示SED在行数据处理、字符串替换及文件修改的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sed

主要是用来将数据进行选取、替换、删除、新增的命令。

[root@localhost ~]# sed [选项] ‘[动作]’ 文件名
选项:
-n: 一般 sed 命令会把所有数据都输出到屏幕,如果加入此选择,则只会
把经过 sed 命令处理的行输出到屏幕。
-e: 允许对输入数据应用多条 sed 命令编辑。
-f 脚本文件名: 从 sed 脚本中读入 sed 操作。和 awk 命令的-f 非常类似。
-r: 在 sed 中支持扩展正则表达式。
-i: 用 sed 的修改结果直接修改读取数据的文件,而不是由屏幕输出
动作:
a \: 追加,在当前行后添加一行或多行。添加多行时,除最后 一行外,
每行末尾需要用“\”代表数据未完结。
c \: 行替换,用 c 后面的字符串替换原数据行,替换多行时,除最后一行
外,每行末尾需用“\”代表数据未完结。
i \: 插入,在当期行前插入一行或多行。插入多行时,除最后 一行外,
每行末尾需要用“\”代表数据未完结。
d: 删除,删除指定的行。
p: 打印,输出指定的行。
s: 字串替换,用一个字符串替换另外一个字符串。格式为“行范围 s/
旧字串/新字串/g”(和 vim 中的替换格式类似)。

sed 所做的修改并不会直接改变文件的内容(如果是用管道符接收的命令的输出,这种情况连文件都没有),而是把修改结果只显示到屏幕上,使用“-i”选项才会直接修改文件。

[root@localhost ~]# sed '2p' student.txt
ID Name PHP Linux MySQL Average
1 Liming 82 95 86 87.66
1 Liming 82 95 86 87.66
2 Sc 74 96 87 85.66
3 Tg 99 83 93 91.66

想指定输出某行数据,需要“-n”选项:

[root@localhost ~]# sed -n '2p' student.txt
1 Liming 82 95 86 87.66

何删除文件的数据:

[root@localhost ~]# sed '2,4d' student.txt
#删除第二行到第四行的数据
ID Name PHP Linux MySQL Average
[root@localhost ~]# cat student.txt
#但是文件本身并没有修改
ID Name PHP Linux MySQL Average
1 Liming 82 95 86 87.66
2 Sc 74 96 87 85.66
3 Tg 99 83 93 91.66

追加和插入行数据:

[root@localhost ~]# sed '2a hello' student.txt
#在第二行后加入 hello

“a”会在指定行后面追加入数据,在指定行前面插入数据,则需要“i”动作:

[root@localhost ~]# sed '2i hello \
> world' student.txt
#在第二行前插入两行数据

追加或插入多行数据,除最后一行外,每行的末尾都要加入“\”代表数据未完结。“-n”选项的作用:

[root@localhost ~]# sed -n '2i hello \
#只查看 sed 命令操作的数据
> world' student.txt

显示文件除前三行之外的全部内容

sed -n '1,3!p' passwd

把文件第三行替换成“bbb”

sed '3cbbb' b.txt 

删除空行

sed '/^$/d' passwd  > c.txt
#将匹配的行记录到新的文件中

把fstab中包含xfs的记录(行)写入新的文件中

sed '/xfs/w newfstab' /etc/fstab

sed 的-i选项可以直接修改文件中的内容

sed -i 's/root/rm/' passwd

如何实现行数据替换,假设李明老师的成绩太好了,我实在是不想看到他的成绩刺激我,那我就可以这样:

[root@localhost ~]# cat student.txt | sed '2c No such person'

sed 命令默认情况是不会修改文件内容的,如果我确定需要让 sed 命令直接处理文件的内容,可以使用“-i”选项。不过要小心啊,这样非常容易误操作,在操作系统文件时请小心谨慎。

  [root@localhost ~]# sed -i '2c No such person' student.txt

sed字符串替换
仅想替换行中的部分数据,需要使用“s”动作了。s 动作的格式是:

[root@localhost ~]# sed ‘s/旧字串/新字串/g’ 文件名
[root@localhost ~]# sed '3s/74/99/g' student.txt
#在第三行中,把 74 换成 99
[root@localhost ~]# sed -e 's/Liming//g ; s/Tg//g' student.txt
#同时把“Liming”和“Tg”替换为空

“-e”选项可以同时执行多个 sed 动作,当然如果只是执行一个动作也可以使用“-e”选项,但这时没有什么意义。还要注意,多个动作之间要用“;”号或回车分割,

[root@localhost ~]# sed -e 's/Liming//g
> s/Tg//g' student.txt

语法结构
sed [options] ‘[command]’ filename
在这里插入图片描述
s/…/…/是分隔符,分割符 “/” 可以用别的符号代替 , 比如 “,” “|” “_“等 .
sed 默认只替换搜索字符串的第一次出现 , 利用 /g 可以替换搜索字符串所有

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值