目录
一、功能简介
sed(Stream EDitor),是一种流文件编辑器,其特点为:
1、非交互式。处理文件时,把当前处理的行存储在临时缓冲区(称为“模式空间”(Pattern Space))中,即它是基于模式匹配过滤及修改文本。 //类比:Vim是一个交互的编辑器
2、逐行处理,sed 命令在缓冲区中一次处理一行内容,处理完成后,把缓冲区的内容送往屏幕,接着处理下一行,直到文件末尾。
正常情况下,sed命令所做的处理只是把操作结果(包括打印、删除等)输出到当前终端屏幕,而并不会对原始文件做任何更改。若希望直接修改文件内容,应添加选项 -i 。为了避免生产环境中因误操作导致系统故障,使用时要谨慎。
sed 主要用来编辑一个或多个文件,简化对文件的反复操作(如:输出、删除、替换、复制、剪切、导入、导出等各种操作)或者用来编写转换程序等。
二、语法格式
格式1: 前置命令 | sed [选项] '[定址符]处理动作' [input-file]
格式2:sed [选项] '[定址符]处理动作’ [input-file]
其中:处理动作可以由-e指定多个处理动作,input-file为输入文件,可指定多个
三、语法说明
1、选项说明
-i:直接修改文件内容,而不是输出到终端。
-n:安静模式,屏蔽默认输出(全部文本),只有经过sed特殊处理的那一行才会被列出来。
-e :指定sed动作,可以由多个-e指定多个动作。
-r:启用扩展的正则表达式,若与其他选项一起使用,应作为首个选项
-f :直接将sed的动作写在一个文件内,-f filename则可以运行filename 内的sed动作;
--help:显示帮助。
--version:显示版本。
-{}:可组合多个命令,以分号分隔
2、动作说明
[n1[,n2]] function
其中:
-
[n1[,n2]]称为定址符,用来定义需要操作的文本,如指定处理的起、止行数。
-
n1, n2 不见得会存在,一般代表“选择进行动作的行数”,举例来说,如果我的动作是需要在 10 到 20 行之间进行,则写作“10,20动作行为”。
-
地址可表示为文本的“行号”,或者用来匹配的“/正则表达式/”
-
省略定址符时,默认逐行处理全部文本。
-
-
fuction为编辑指令,可以为增删改查等指令
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行);
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行;
d :删除,因为是删除,所以 d 后面通常不接任何内容;
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行;
s :替换,通常这个s的动作可以搭配正规表示法!例如 1,20s/old/new/g。
四、典型示例
基本的处理动作
替换担任的分隔“/”,可改用其他字符,如#、&等,便于修改文件路径
示例:把/bin/bash替换为/sbin/sh (/etc/passwd)
# sed "s/\/bin\/bash/\/sbin\/sh/" /etc/passwd