Linux三剑客之sed实战

本文介绍了Linux中sed流编辑器,它是强大的文本处理工具,支持替换、删除等功能。先决定选取行,将其存于模式空间处理后输出。还给出了命令参数如 -n、-e 等,动作参数如 a、c、d 等,并通过14个示例展示了其快速入门用法。

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

基本介绍

sed是Linux中一种流编辑器,是文本处理非常有力的工具,支持将数据进行替换、删除、新增、选取等功能。首先将决定选取哪些行进行编辑,规则可以是数字、正则表达式等,若没有限制,则将处理输入文件的所有行。在处理时,将当前行存储在临时缓存区中,称为”模式空间“,然后使用sed指令处理缓冲区的内容,处理成功后,把缓冲区的内容输出到屏幕上。

语法格式

sed [-nefri] 动作

命令参数

  • -n:使用安静模式,只列出被选取的行;
  • -e:允许多项操作;
  • -f :读取文件中的sed动作;
  • -r:支持扩展正则表达式;
  • -i:直接修改文件内容;
  • =:打印匹配行的行号;
  • 注意:& 符号在sed命令中代表上次匹配的结果

动作参数

  • a:新增,在当前行后添加一行或者多行;
  • c:替换,替换当前行;
  • d:删除,删除当前行;
  • i :插入,在当前行前插入一行或者多行;
  • p:打印,打印行;
  • l :打印行号;
  • n:读取下一输入行,并从下一条命令开始处理;
  • q:结束或退出sed;
  • r:从文件中读取输入行;
  • !:对所选行以外的所有行应用命令;
  • s:用一个字符替换另一个;
  • g:在行内进行全局替换;
  • w:将所选的行写入文件;
  • y:将字符串替换为另一个字符;

快速入门

test.txt文件内容如下:

1,20,I
2,30,hello
3,21,am
4,32,world
5,43,yu
6,21,yuakw
7,22,zhanyu

1. 打印文件第3-6行

sed -n '3,6p' test.txt
3,21,am
4,32,world
5,43,yu
6,21,yuakw

2. 查找指定字符行

sed -n '/21/p' test.txt
3,21,am
6,21,yuakw

3. 查找两个指定字符之间的行

sed -n '/21/,/yu/p' test.txt
3,21,am
4,32,world
5,43,yu
6,21,yuakw
7,22,zhanyu

4. 打印匹配行的内容和符号

sed -n -e '/21/p' -e '/21/=' test.txt
3,21,am
3
6,21,yuakw
6

5. 字符串替换

sed 's/yu/111/g' test.txt
1,20,I
2,30,hello
3,21,am
4,32,world
5,43,111
6,21,111akw
7,22,zhan111

6. 打印最后一行

sed -n '$p' test.txt
7,22,zhanyu

7. 文件首尾各增加一行

sed -e '1i hi' -e '$a world' test.txt
hi
1,20,I
2,30,hello
3,21,am
4,32,world
5,43,yu
6,21,yuakw
7,22,zhanyu
world

8. 文件第1到4行每行前面新增一行

sed '1,4i haha' test.txt
haha
1,20,I
haha
2,30,hello
haha
3,21,am
haha
4,32,world
5,43,yu
6,21,yuakw
7,22,zhanyu

9. 删除第2到4行

sed '2,4d' test.txt
1,20,I
5,43,yu
6,21,yuakw
7,22,zhanyu

10. 文件里2到6行里替换指定字符,并将改变写入文件中

sed -i '2,6 s/yu/zhan/g' test.txt
[yuzhan]$ cat test.txt 
1,20,I
2,30,hello
3,21,am
4,32,world
5,43,zhan
6,21,zhanakw
7,22,zhanyu

11. 将另一个文件内容添加到某行中

sed '/am/ r a.txt' test.txt 
[yuzhan]$ cat a.txt 
qqq 222
www 111
[yuzhan]$ sed '/am/ r a.txt' test.txt 
1,20,I
2,30,hello
3,21,am
qqq 222
www 111
4,32,world
5,43,zhan
6,21,zhanakw
7,22,zhanyu

12. 将文件中某行写入到另一个文件中

sed '/am/ w a.txt' test.txt
[yuzhan]$ cat a.txt 
3,21,am

13. &使用

sed 's/yu/zhan_&/g' test.txt 
1,20,I
2,30,hello
3,21,am
4,32,world
5,43,zhan_yu
6,21,zhan_yuakw
7,22,zhan_yuzhan_yu

14. 结合find替换文件指定内容

find . -name  "*.txt" |xargs sed -i 's/zhan/yu/g'
1,20,I
2,30,hello
3,21,am
4,32,world
5,43,yu
6,21,yuakw
7,22,yuyu

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值