sed是源于行编辑器ed的非交互式的流(stream-oriented)编辑器。sed之所以称为“流”编辑器,是因为象大多数UNIX程序一样,输入流过它,然后被导向标准输出。sed编辑器逐行处理文件(或输入),把当前处理的行存储在称为“模式空间”(pattern space)的临时缓冲区中,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。sed处理完一行后将其从模式空间中删除,然后读入下一行进行处理和输出。sed是对文件副本进行编辑和修改,所以不用担心会修改或破坏原文件。sed主要用来自动编辑一个或多个文件,简化对文件的反复操作和编写转换程序等。
1、使用句点匹配单字符 句点“.”可以匹配任意单字符。“.”可以匹配字符串头,也可以是中间任意字符。假定正在过滤一个文本文件,对于一个有1 0个字符的脚本集,要求前4个字符之后为X C,匹配操作如下:. . . .X C. . . .
2、在行首以^匹配字符串或字符序列 ^只允许在一行的开始匹配字符或单词。在行首第4个字符为1,匹配操作表示为:^ . . . 1
3、在行尾以$匹配字符串或字符 可以说$与^正相反,它在行尾匹配字符串或字符, $符号放在匹配单词后。如果在行尾匹配单词j e t 0 1,操作如下:j e t 0 1 $ 如果只返回包含一个字符的行,操作如下:^ . $
4、使用*匹配字符串中的单字符或其重复序列 使用此特殊字符匹配任意字符或字符串的重复多次表达式。
5、使用\屏蔽一个特殊字符的含义 有时需要查找一些字符或字符串,而它们包含了系统指定为特殊字符的一个字符。如果要在正则表达式中匹配以* . p a s结尾的所有文件,可做如下操作:\ * \ . p a s
6、 sed正则表达式元字符
元字符 | 使 用 |
. | 除换行(\n)之外的任何字符 |
* | 匹配0或多个前导字符,相当于\{0,\} (如:/*love/) |
+ | 匹配1或多个前导字符,相当于\{1,\} 注意这是扩展元字符 |
[...] | 匹配指定字符组内的任一字符 (如:/[Ll]ove/ |
\{n,m\} | 匹配至少n个,至多m个前导字符;\{n\} 将匹配正好 n个, \{n,\}将匹配至少n个 (如:/o\{5,10\}) |
^ | 行首定位符 |
$ | 行尾定位符 |
\ | 取消转义字符 |
\( \) | 保存已匹配的字符,最多可定义9个标签(如:s/\(love\)able/\1er/) |
\n | 获取以上获取的第n个标签 |
& | 保存查找串以便在替代串中引用 (如 s/love/**&**/g) |
\< | 词首定位符 /\<love/ |
\> | 词尾定位符 /love\>/ |