sed命令主要涉及到两个后缀: -i 与 -e.
sed -i 适用于在原始文本上编辑, i 意为in-place, 它允许你在不创建备份文件的情况下, 修改原始文件中的文本. 例如:
sed -i 's/old_pattern/new_pattern/g' filename
这行命令将filename文件中所有old_pattern字符串替换为new_pattern字符串.
其中s代表替换操作 substitue, 表示进行替换操作; g代表 global, 代表对每一行中的每一个old_pattern都进行替换. 如果没有g, 则只替换每一行中的第一个old_pattern.
/ 符号为分隔符, 分隔符也可以用 # , 以避免与字符串中的 / 发生混淆:
sed -i 's#old_pattern#new_pattern#g' filename
sed -e 用于指定多个编辑命令, 可以进行多个pattern的搜索与替换. 例如:
sed -e 's/old_pattern/new_pattern/g' -e 's/another_pattern/yet_another_pattern/g' filename > new_filename
这行命令将filename文件中所有old_pattern替换为new_pattern, 将所有another_pattern替换为yet_another_pattern.
同时, 将修改后的filename保存为new_filename并保存在当前相同的路径中, 这将不影响原来的filename.
如果希望直接在原始文本中指定多个编辑命令, 可以同时使用 -i 与 -e. 例如:
sed -i -e 's/old_pattern/new_pattern/g' -e 's/another_pattern/yet_another_pattern/g' filename
如果在其他路径直接调用包含sed命令的脚本, 例如在terminal直接执行, 或者在python脚本中使用subprocess调用时, 需要注意路径问题. filename尽量使用绝对路径. 如果filename为相对路径, 那么它相对的不会在bash脚本所在路径, 而是调用它的(python / terminal)脚本所在路径.