sed学习笔记(1) - 入门知识

简介:

sed是一种在线编辑器,它一次处理一行内容。
处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。
文件内容并没有改变,除非你使用重定向存储输出。

在处理方式上,sed与awk很类似,都是逐行读取。sed在批量处理文本时很有用,常用来做批量替换。

awk适合用来处理表格类的数据,而sed则适合用来处理不规则的数据

从语法上看,sed与awk都很相似:

  • sed [options] 'command' file(s)
  • sed [options] -f scriptfile file(s)

先看一些最简单的sed例子:

先创建一个测试文件sed.txt,内容如下:

 
 
  1. 1034 7:26  
  2. 1034 7:27 
  3. 1101 7:32  
  4. 1006 7:45 
  5. 1012 7:46  
  6. 1028 7:49  
  7. 1051 7:51 
  8. 1029 7:57  
  9. 1042 7:59 
  10. 1008 8:01  
  11. 1052 8:05  
  12. 1005 8:12 
  13. 1005 8:13 

1.打印文件某一行

 
 
  1. sed -n '3p' sed.txt 

输出:

 
 
  1. 1101 7:32  

说明:上面的程序打印出了文档的第三行。-n选项会禁止默认的输出,如果不使用,将会打印出整个文件。sed默认会将每一行都输出到标准输出设备上,此项关闭了这个属性。p用于将模式空间中的内容输出到标准输出设备中。在这个例子中,3表示的是第三行,当第三行进入到模式空间后,就会输出到标准输出设备上。

上面的程序严格来说是有效率问题的,如果我们的sed.txt有一千万行,上面的程序在输出第三行后仍然会扫描余下的行,这样会很慢。改进一下:

 
 
  1. sed -n '3p;3q' sed.txt  

或者:

 
 
  1. sed -n '3{p;q;}' sed.txt 

要用awk来实现上面的功能,可以用下面的代码:

 
 
  1. awk 'NR==3' sed.txt

当然,为了提高效率,可以如下改进:

 
 
  1. awk 'NR==3{print;exit;}' sed.txt 

 

2.打印文件的某几行

 
 
  1. sed -n '3,5p:5q' sed.txt  

输出:

 
 
  1. 1101 7:32  
  2. 1006 7:45 
  3. 1012 7:46  

说明:上面的程序打印出了文档的第3-5行。3,5表示的是打印的范围。

用awk来实现如下:

 
 
  1. awk 'NR>=3&&NR<=5' sed.txt 

更高效一点:

 
 
  1. awk '{if(NR>=3&&NR<=5){print}else if(NR>5){exit}}' sed.txt 

 

3.打印整个文件

 
 
  1. sed '' sed.txt 

输出:

 
 
  1. 1034 7:26  
  2. 1034 7:27 
  3. 1101 7:32  
  4. 1006 7:45 
  5. 1012 7:46  
  6. 1028 7:49  
  7. 1051 7:51 
  8. 1029 7:57  
  9. 1042 7:59 
  10. 1008 8:01  
  11. 1052 8:05  
  12. 1005 8:12 
  13. 1005 8:13 

说明:当command什么都不写,也没有指定-n时,sed会取出每一行输出。

awk的实现如下:

 
 
  1. awk '{print}' sed.txt 









本文转自 ustb80 51CTO博客,原文链接:http://blog.51cto.com/ustb80/1057812,如需转载请自行联系原作者
目录
相关文章
|
4月前
|
Unix Perl
`sed` 命令完整指南教程
【8月更文挑战第20天】
325 0
|
7月前
|
Shell Perl
sed的在脚本中的实践案例
sed的在脚本中的实践案例
48 2
|
存储 机器学习/深度学习 Unix
sed 和 awk 使用方法 | 学习笔记
快速学习 sed 和 awk 使用方法。
|
Shell Perl 存储
sed入门详解教程
sed 是一个比较古老的,功能十分强大的用于文本处理的流编辑器,加上正则表达式的支持,可以进行大量的复杂的文本编辑操作。sed 本身是一个非常复杂的工具,有专门的书籍讲解 sed 的具体用法,但是个人觉得没有必要去学习它的每个细节,那样没有特别大的实际意义。
1160 0
|
机器学习/深度学习 Shell Perl
|
Perl Linux 机器学习/深度学习