D27
sed和awk是我们处理文本文件的有力工具。
sed是用来解析和转换文本的工具,它使用简单,是简洁的程序设计语言。
sed是最早的支持正则表达式的工具之一,并且仍用于文本处理,特别是替换指令。
1. sed简介
sed是非交互式的面向数据流的编辑器。之所以说它是面向数据流的,是因为像很多Unix程序程序一样,输入通过程序被重定向到标准输出。
输入通常来自文件,也可以来自键盘;输出默认是发送到终端屏幕,也可以重定向到文件。
sed可以通过解释脚本来工作,该脚本中指定了将要执行的动作。
使用sed做如下操作:
1)自动化的编辑一个或多个文件;
2)简化在多个文件中执行相同编辑的任务;
3)编写转换程序。
2. sed的模式空间
sed维护一种模式空间,即一个工作区或临时缓冲区,当使用编辑命令时,将在那里存储单个输入行。
注:sed一次处理一行输入的优点是在读取非常庞大的文件时不会出现问题。一般的文本编辑器必须将整个文件(或者它庞大的一部分)读入内存,这将会产生内存溢出或在处理庞大文件时速度非常慢。
初始时,模式空间包含单个输入行的备份,之后在这一行上执行每个命令。注意第二个替换指令不匹配最初的输入行,匹配模式空间中发生了变化的当前行。当应用了所有的指令后,当前行被输出且输入的下一行被读入模式空间。然后sed脚本中的所有命令应用于新读入的行。结果是:任何一个sed命令都可以为下一个命令修改模式空间的内容。模式空间的内容是动态的,而且并不总是匹配最初的输入行。
2. 基本的sed编辑命令
语法:
sed [OPTIONS]... ‘COMMAND‘ [FILE]...
sed [OPTIONS] -f SCRIPTFILE [FILE]...
常用的选项:
选项 | 说明 |
-e |
告诉sed下一个参数解释为sed指令。在命令行上给出多个sed指令时才需要使用。 |
-f | 指定由sed指令组成的脚本的名称。如果sed脚本的第一行为#n,则sed的行为与指定-n选项相同。 |
-i | 直接修改读取的内容,而不是输出到终端。 |
-n | 取消默认输出。一般sed用法中,所有来自标准输入的数据一般都会被显示到终端上;但使用-n选项厚,只有经过sed处理的行才会被显示输出。 |