sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
定址: 用逗号分隔的两个行数表示以这两行为起止的行的范围(包括行数表示的那两行)。如 1 , 3 表示 1 , 2 , 3 行,美元符号($)表示最后一行。
调用sed命令有两种形式:
1> sed [options] 'command' file(s)
2> sed [options] -f scriptfile file(s)
选项 [options]:
-e command , --expression=command 多点编辑 -n 行数
命令 'command' :
删除:d命令 替换:s命令 g 行内全面替换 p 打印模板块的行 从文件读入 :r命令
w file 写并追加模板块到file末尾 W file 写并追加模板块的第一行到file末尾
a\ 在当前行后面加入一行文本 i\ 在当前行上面插入文本
n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令
y表示把一个字符翻译为另外的字符(但是不用于正则表达式)
退出:q命令
h 拷贝模板块的内容到内存中的缓冲区 G 获得内存缓冲区的内容,并追加到当前模板块文本的后面
x表示互换模板块中的文本和缓冲区中的文本。
元字符集:
^: 锚定行的开始 $: 锚定行的结束 &: 保存搜索字符用来替换其他字符,如s/love/**&**/ ,love这成**love**。
\(..\): 保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers
例子:
sed 's/test/mytest/g' example-----在整行范围内把test替换为mytest。如果没有g标记,则只有每行第一个匹配的test
sed -n 's/^test/mytest/p' example-----(-n)选项和p标志一起使用表示只打印那些发生替换的行
sed 's/^192.168.0.1/&localhost/' example-----&符号表示替换换字符串中被找到的部份
sed --expression= 's/test/check/' --expression= '/love/d' example-----一个比-e更好的命令是--expression
它能给sed表达式赋值
sed '/test/{ n; s/aa/bb/; }' example
$ sed -e '/test/h' -e '$G example 在sed处理文件的时候,每一行都被保存在一个叫模式空间的临时缓冲区中,除非行 被删除或者输出被取消,否则所有被处理的行都将 打印在屏幕上。接着模式空间被清空,并存入新的一行等待处理。在这个例子里,匹 配test的行被找到后,将存入模式空间,h命令将其复制并存入一个称为保 持缓存区的特殊缓冲区内。第二条语句的意思是,当到达最 后一行后,G命令取出保持缓冲区的行,然后把它放回模式空间中,且追加到现在已经存在于模式空间中 的行的末尾。在这个例子中就 是追加到最后一行。简单来说,任何包含test的行都被复制并追加到该文件的末尾