一. sed工具简介
Stream EDitor 流式编辑器
非交互式,基于模式匹配过滤和修改文本
逐行处理,并将结果输出到屏幕
可实现对文本的输出、删除、替换、复制、剪切、导入、导出等各种操作
命令格式
主要用法:
格式一:前置命令 | sed [选项] ‘编辑指令’
格式二:sed [选项] ‘编辑指令’ 文件
常见命令选项:
-n : 屏蔽默认输出(全部文本)
- i : 直接修改文件内容
-r : 启用扩展的正则表达式,若与其他选项一起使用,应作为首个选项
条件,可以是行号或/正则/
行号可以使用当个数字表示单行
或者3,5表示连续的多行
省略条件,则默认逐行处理全部文本
匹配正则时,需要使用//
二. sed基本处理动作
操作符 | 用途 | 指令示例 |
p | 打印行 | 2,4p 输出第2、3、4行 |
2p;4p 输出第2行、4行 | ||
d | 删除行 |
2,4d 删除第2、3、4行 |
s |
字符串替换 |
s/old/new/ 将每行的第1个old替换new |
s/old/new/3 将每行的第3个old替换new | ||
s/old/new/g 将所有old替换new |
输出文本
示例 | 解释 |
sed -n 'p' abc.txt | 输出所有行,等同于cat abc.txt |
sed -n '3p' abc.txt |
输出abc.txt第三行 |
sed -n '4,7p' abc.txt | 输出abc.txt第3~7行 |
sed -n '4,+10p' abc.txt |
输出abc.txt第4行及其后的10行内容 |
sed -n '/^hello/p' abc.txt | 输出abc.txt以hello开头的行 |
sed -n '$=' abc.txt | 输出文件的行数 |
删除文本
示例 | 解释 |
sed ‘3,5d’abc.txt | 删除abc.txt第3~5行 |
sed '/xml/d' abc.txt |
删除abc.txt所有包含xml的行 |
sed '/xml/!d' abc.txt | 删除abc.txt不包含xml的行,!符号表示取反 |
sed '/^hello/d' abc.txt |
删除abc.txt以hello开头的行 |
sed '$d' abc.txt | 删除abc.txt文件的最后一行 |
sed '/^$/d' abc.txt | 删除abc.txt所有空行 |
替换文本
示例 | 解释 |
sed 's/hello/HELLO/' abc.txt | 将每行中的第一个hello替换为HELLO |
sed 's/hello/HELLO/3' abc.txt |
将每行中的第三个hello替换为HELLO |
sed 's/hello/HELLO/g' abc.txt | 将所有的hello都替换为HELLO |
sed 's/^hello//g' abc.txt |
将所有的hello都删除(替换为空串) |
sed '4,7s/^/#/' abc.txt | 将第4~7行注释掉(行首加#号) |
sed 's/^#hell/hell/' abc.txt | 解除以#hell开头的行的注释(去除行首的#号) |
三. sed文本块
操作符 | 用途 | 指令示例 |
i |
行前插入文本 | 2iYY 在第2行之前添加文本行“YY” |
4,7iYY 在第4-7行的每一行前添加文本行 | ||
a | 行后插入文本 | 2aYY 在第二行之后添加文本 |
/^XX/aYY 在以XX开头的行之后添加文本 | ||
c |
替换当前行 | 2cYY 将第2行的内容修改为"YY" |
四.sed复制剪切
模式空间
存放当前处理的行,将处理结果输出
若当前行不符合处理条件,则原样输出
处理完当前行再读入下一行来处理
保持空间
作用类似于“剪贴板”
默认存放一个空行(换行符\n)
基本动作
H: 模式空间 --- [追加] ---> 保持空间
h: 模式空间 --- [覆盖] ---> 保持空间
G: 保持空间 --- [追加] ---> 模式空间
g: 保持空间 --- [覆盖] ---> 模式空间
实例1:
将reg.txt的第1-3行复制到文件末尾
[root@client ~]# cat reg.txt abcd xx xx abcabcd xx [root@client ~]# sed '1,3H;$G' reg.txt abcd xx xx abcabcd xx abcd xx xx abcabcd xx
实例2:
将第1-2行剪切到文件末尾
[root@client ~]# cat reg.txt abcd xx xx abcabcd xx [root@client ~]# sed '1h;2H;1,2d;$G' reg.txt abcabcd xx abcd xx xx
五. 文件导入导出
导入导出操作
基本动作
r 动作结合-i选项才会存入,否则只输出
w 动作以覆盖的方式另存为新文件
操作符 |
用途 | 指令示例 |
r | 读取文件 | 3r abc.txt 在第3行下方插入文件abc.txt |
4,7r abc.txt 在第4-7每一行后插入文件abc.txt | ||
w | 保存到文件 | 3w abc.txt 将第3行另存为文件abc.txt |
4,7w abc.txt 将第4-7行另存为文件abc.txt |