Linux三剑客之sed实战

基本介绍

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
发布了126 篇原创文章 · 获赞 219 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/yz930618/article/details/90518157