sed 是一种新型的,非交互式的编辑器。它能执行与编辑器 vi 和 ex 相同的编辑任务。sed 编辑器没有提供交互式使用方式,使用者只能在命令行输入编辑命令、指定文件名,然后在屏幕上查看输出。 sed 编辑器没有破坏性,它不会修改文件,除非使用 shell 重定向来保存输出结果。默认情况下,所有的输出行都被打印到屏幕上。
sed 编辑器逐行处理文件(或输入),并将输出结果发送到屏幕。 sed 的命令就是在 vi和 ed/ex 编辑器中见到的那些。 sed 把当前正在处理的行保存在一个临时缓存区中,这个缓存区称为模式空间或临时缓冲。sed 处理完模式空间中的行后(即在该行上执行 sed 命令后),就把改行发送到屏幕上(除非之前有命令删除这一行或取消打印操作)。 sed 每处理完输入文件的最后一行后, sed 便结束运行。 sed 把每一行都存在临时缓存区中,对这个副本进行编辑,所以不会修改或破坏源文件。如图 1: sed 处理过程。
sed 的常用选项
选项 | 说明 |
-n | 使用安静模式,在一般情况所有的 STDIN 都会输出到屏幕上,加入-n 后只打印 被 sed 特殊处理的行 |
-e | 多重编辑,且命令顺序会影响结果 |
-f | 指定一个 sed 脚本文件到命令行执行, |
-r | Sed 使用扩展正则 |
-i | 直接修改文档读取的内容,不在屏幕上输出 |
sed 的正则表达式元字符
元字符 | 功 能 | 示 例 | 示例的匹配对象 |
^ | 行首定位符 | /^love/ | 匹配所有以 love 开头的行 |
$ | 行尾定位符 | /love$/ | 匹配所有以 love 结尾的行 |
. | 匹配除换行外的单 个字符 | /l..e/ | 匹配包含字符 l、后跟两个任意 字符、再跟字母 e 的行 |
* | 匹配零个或多个前 导字符 | /*love/ | 匹配在零个或多个空格紧跟着 模式 love 的行 |
[] | 匹配指定字符组内 任一字符 | /[Ll]ove/ | 匹配包含 love 和 Love 的行 |
[^] | 匹配不在指定字符 组内任一字符 | /[^A-KM-Z]ove/ | 匹配包含 ove,但 ove 之前的那 个字符不在 A 至 K 或 M 至 Z 间 的行 |
\(..\) | 保存已匹配的字符 | ||
& | 保存查找串以便在 替换串中引用 | s/love/**&**/ | 符号&代表查找串。字符串 love 将替换前后各加了两个**的引 用,即 love 变成**love** |
\< | 词首定位符 | /\<love/ | 匹配包含以 love 开头的单词的 行 |
\> | 词尾定位符 | /love\>/ | 匹配包含以 love 结尾的单词的 行 |
x\{m\} | 连续 m 个 x | /o\{5\}/ | 分别匹配出现连续 5 个字母 o、 至少 5 个连续的 o、或 5~10 个 连续的 o 的行 |
x\{m,\} | 至少 m 个 x | /o\{5,\}/ | |
x\{m,n\} | 至少 m 个 x,但不 超过 n 个 x | /o\{5,10\}/ |
想学习正则表达式,可观看:《perl高级编程》
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!