0%

Linux下shell命令用法及常见用例:sed

sed是stream editor(流式编辑器)的缩写,是一个非交互式的流编辑器,用于过滤或者转换文本。
未完待续…

概要

sed 选项… [脚本] [输入文件…]

描述

sed编辑器被称作流编辑器(stream editor),和普通的交互式文本编辑器恰好相反。在交互式文本编辑器中(比如vim),你可以用键盘命令来交互式地插入、删除或替换数据中的文本。流编辑器则会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。
sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中。sed编辑器会执行下列操作。
(1) 一次从输入中读取一行数据。
(2) 根据所提供的编辑器命令匹配数据。
(3) 按照命令修改流中的数据。
(4) 将新的数据输出到STDOUT。 在流编辑器将所有命令与一行数据匹配完毕后,它会读取下一行数据并重复这个过程。在流编辑器处理完流中的所有数据行后,它就会终止。 由于命令是按顺序逐行给出的,sed编辑器只需对数据流进行一遍处理就可以完成编辑操作。
这使得sed编辑器要比交互式编辑器快得多,你可以快速完成对数据的自动修改。

理解

这个命令使用起来有些复杂,复杂在于功能强大,需要逐步消化。

常见用例

实例 替换input.txt文件中所有的“hello”为“world”,并且输出到output.txt中。

1
sed 's/hello/world/' input.txt > output.txt

这可能是最常用的例子了(至少在我工作这么多年的经验中),这里使用了sed的命令s。如果想输出到原文件的话,使用-i参数。

1
sed -i 's/hello/world/' input.txt

这个在mac下表现会不一样,参考:https://blog.csdn.net/cuiaamay/article/details/49495885。

参考:https://www.gnu.org/software/sed/manual/sed.html。