示例
1.要执行全局更改,请输入:
sed "s/happy/enchanted/g" chap1 >chap1.new
该命令序列用字 enchanted 替换每个在文件 chap1 中出现的字 happy。它将已编辑的版本写入名为 chap1.new 的单独文件中。s 子命令结尾的 g 字符指示 sed 命令在每行中尽可能多地进行替代。如果没有 g 字符,那么 sed 命令只会替换行中首次出现的字 happy。
sed 命令作为过滤器操作。它从标准输入或命令行指定的文件中(本例中是 chap1)读取文本、修改文本、并将其写到标准输出。不同于大多数的编辑器,它不替换原始文件。这会使 sed 命令在用于管道时成为一个强大的命令。
2.要在管道中将 sed 命令作为过滤器使用,请输入:
pr chap2 | sed "s/Page [0-9]$/(&)/" | enq
该命令序列在显示文件 chap2 之前将页码包含在圆括号中。pr 命令将标题和页码放置在每页的顶部,然后 sed 命令将页码放在圆括号中,enq 命令显示已编辑的列表。
sed 命令模式 /Page [0-9]$/ 与在行尾出现的页码相匹配。s 子命令将其更改为 (&),其中 & 代表匹配的页码。
3.要显示文件的选定行,请输入:
sed -n "/food/p" chap3
sed -n 显示文件 chap3 中包含字 food 的每一行。通常,sed 命令将编辑过的每行复制到标准输出。-n 终止 sed 命令进行该操作。 然后,您使用子命令(如 p )写入文本的特定部分。如果没有 -n 标志,该示例会显示文件 chap3 中的所有行,并显示两次包含 food 的每个行。
4.要执行复杂的编辑,请输入:
sed -f script.sed chap4 >chap4.new复制
当您想做任何复杂的编辑时,该命令序列创建一个 sed 脚本文件。然后,您可以在使用该脚本之前对其进行测试和修改。您也可以重用脚本来编辑其他文件。用交互式文本编辑器创建脚本文件。
样本 sed 脚本文件:
:join
/\$/{N
s/\\n//
b join
}
sed 脚本将每个以 \(反斜杠)结束的行连接到其后的行上。首先, /\$/ 模式对于用 {}(花括号)括起来的一组命令选择以 \ 结尾的一行。然后,N 子命令附加下一行,嵌入换行符。s/\\n// 删除 \ 和嵌入的换行符。最后,b join 转移回到标号 :join 以在新连接的行末检查 \。如果没有分支,那么 sed 命令将写入已连接的行并读取下一行,然后再检查第二个 \。
注:
如果没有更多的输入行(也就是说,如果 N 子命令读取文件结束符),N 子命令将导致 sed 命令立刻停止。在停止前它不将模式空间复制到标准输出。这意味着如果输入的最后行结束于 \ , 就不将其复制到输出。
6.要将现有的文件(oldfile)复制到新文件(newfile),并将所有出现的 testpattern 文本字符串替换为 $REPL shell 变量的内容,请输入:
cat oldfile | sed -e "s/testpattern/$REPL/g" > newfile
7.要替换输入文件中出现的所有带有 a 的 A、带有 b 的 B、带有 c 的 C 和出现的所有带有字符 Z 的换行,请输入:
$ sed -f command.file input.file复制
其中 command.file 是脚本文件,input.file 是输入文件。
$cat command.file
y/ABC\n/abcZ/
另外,还可以执行以下命令来获取相同的功能:
sed "y/ABC\n/abcZ/" input.file
转载于:https://blog.51cto.com/14127438/2337516