Shell脚本学习之sed详解

http://blog.csdn.net/engledb/article/details/19623087

linux(1)

目录(?)[+]

在编写shell脚本的过程中,我们经常需要使用sed流编辑器和awk对文本文件进行处理。

一、什么是sed?

    sed 是一种在线编辑器,它一次处理一行内容。sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。

 

二、sed的处理过程

    sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。具体过程如下:首先sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。sed每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显示。处理完输入文件的最后一行后,sed便结束运行。

   前面说到sed不会修改文件,那么现在我们可以知道是为什么了?是因为sed把每一行都存在临时缓冲区中,对这个副本进行编辑,所以不会修改原文件。

补充知识:

    在使用sed的过程中,我们经常会听到“定址”,那么什么是“定址”呢?

    定址用于决定对哪些行进行编辑。地址的形式可以是数字、正则表达式、或二者的结合。如果没有指定地址,sed将处理输入文件的所有行。

1、地址是一个数字,则表示行号;是“$"符号,则表示最后一行。

例如:

[plain] view plain copy
  1. sed -n '3p' datafile   #只打印第三行  

 

2、只显示指定行范围的文件内容

例如:

[plain] view plain copy
  1. sed -n '100,200p' mysql_slow_query.log  # 只查看文件的第100行到第200行  

 

3、地址是逗号分隔的,那么需要处理的地址是这两行之间的范围(包括这两行在内)。范围可以用数字、正则表达式、或二者的组合表示。

例如:

[plain] view plain copy
  1. sed '2,5d' datafile  
  2. #删除第二到第五行  
  3.   
  4. sed '/My/,/You/d' datafile  
  5. #删除包含"My"的行到包含"You"的行之间的行  
  6.   
  7. sed '/My/,10d' datafile  
  8. #删除包含"My"的行到第十行的内容  

你可能感兴趣的:(shell)