sed 是一个非交互式上下文(context)编辑器,它被设计在下列三种情况下发挥作用:
1) 编辑那些对舒适的交互式编辑而言太大的文件。
2) 在编辑命令太复杂而难于在交互模式下键入的时候编辑任何大小的文件。
3) 要在对输入的一趟扫描中有效的进行多个‘全局’(global)编辑函数。
因为每次只把输入的某些行驻留在内存中,并且不使用临时文件,所以可编辑的文件的有效大小,只受限于输入和输出要同时共存于次级存储的要求。
1.-- \1
***Explain Begin***
意思是将echo 输出的结果中的\(/home\)/tolstoy/ 替换为\1/lt/
\1 代表是的是前面()里面的内容(此处为第一个正则表达式) 所以是 \1 = /home
NOTE:区别:
ed与其先驱ex和vi一样,sed 会记住在脚本里遇到的最后一个正则表达式——不管它在哪。通过使用空的正则表达式,同一个正则表达式可以再使用:
s/foo/bar/3 表示更换第三个foo.
s//quux/ 表示更换第一个
***End***
2.-- &
***Explain Begain***
1.这先是建个了atlga.xml的备份文件:atlga.xml.old文件。
2.在atlga.xml.old中把Chamber of Commerce替换成the capital of the South.
3.然后把替换完的文件输出为atlga.xml文件。而atlga.xml.old文件保持不变化。
***End***
3.-- /g
4.-- e -f
还可以这样,如下:
不过,还是有许多版本的sed不支持此功能。
6.实现HTML向XHTML的转换:
像这样的脚本就可以执行大量的HTML转XHTML了。XHTML是标准化的,是以XML为主的HTML版本。
7.-- n /p
8.sed工作模式:
图3-2:Sed脚本中的命令改变了模式空间
9.匹配特定行:
9.1.s命令里的空模式:
s命令里的空模式指的是使用前一个正则表达式:
9.2 s命令中的范围内匹配:
10.否定正则表达式:
下面的例子说明的是使用绝对的行编号作为地址的用法,这里是以sed展现的head简易版:
使用sed的head命令:
当你使用head 10 foo.xml后,sed 会转换成sed 10q foo.xml 。q命令要求sed马上离开,不再读取其他输入或是执行其他命令。
11.讨论有多少文本会改动?
12.Longest leftmost 原则:
13.匹配NULL
参考下面的输出,来推理和理解下上面是例子:
只要有空(0)个,它也匹配了。