【参考文章】:shell中sed命令的用法
【参考文章】:SED 简明教程
1. 简述
sed是一种流编辑器,它是文本处理中非常重要的工具,能够完美的配合正则表达式使用。
执行命令时,一次处理一行内容,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。
sed命令处理时只会改变缓冲区中文本的副本,如果想要直接编辑原文件,可以使用 -i 选项或者将结果重定向到新的文件中。
2. 用法
sed [选项] 动作 [文件路径]
-n:取消自动打印模式;
-i :直接修改读取的内容并写入源文件,并且不会输出到控制台;若在 -i 后面添加 .xx 后缀名,则修改前自动备份文件;
-r :支持扩展的正则表达式(默认支持基础的正则表达式);
-f :执行指定脚本文件中的命令;
3. 子命令
3.1 s 替换
命令 | 完整示例 | 说明 |
---|---|---|
s/old/new/ | sed 's/old/new/' 1.txt | 1.txt中每行的第一个old都替换成new |
s/old/new/2 | sed 's/old/new/' 1.txt | 1.txt中每行的第二个old都替换成new |
s/old/new/g | sed 's/old/new/g' 1.txt | 1.txt中每行的每一个old都替换成new |
s/old// | sed 's/old//' 1.txt | 1.txt中每行的第一个old都替换成空也就是把old删除 |
s/old/&s/ | sed 's/old/&s/' 1.txt | 1.txt中每行的第一个old都替换成olds &代表前面查找的字符串 |
4,7s/^/#/ | sed '4,7s/^/#/' 1.txt | 1.txt中4-7行开头加上# 也就是批量添加注释 |
4,7s/^#an/an/ | sed '4,7s/^#an/an/' 1.txt | 1.txt中4-7行以#an开头的行去掉# |
3.2 i a c 插入
命令 | 完整示例 | 说明 |
---|---|---|
行号 i | sed '2i123' 1.txt | 在1.txt的第二行前面插入123 |
正则 i | sed '/^[0-9]/i123' 1.txt | 在1.txt中所有数字开头的行前面插入123 |
a | 在行后插入 | 命令格式和i相同 |
c | 替换该行 | 命令格式和i相同 |
3.3 d 删除
命令 | 完整示例 | 说明 |
---|---|---|
2d | sed '2d' 1.txt | 删除1.txt的第二行 |
2,5d | sed '2,5d' 1.txt | 删除1.txt的第二行到第五行 |
2,+5d | sed '2,+5d' 1.txt | 删除1.txt的第二行和第二行以后的5行 |
$d | sed '$d' 1.txt | 删除1.txt的最后一行行 |
/正则/ | sed '/^[0-9]/d' 1.txt | 删除以数字开始的行 |
! | sed '/^[0-9]/!d' 1.txt | 删除不是以数字开头的行 |
^$ | sed '^$' 1.txt | 删除1.txt的空行 |
3.4 p 输出
命令 | 完整示例 | 说明 |
---|---|---|
p | sed -n 'p' 1.txt | 输出1.txt的所有行 |
2p | sed -n '2p' 1.txt | 输出1.txt的第二行 |
2,5p | sed -n '2,5p' 1.txt | 输出1.txt的第二行到第五行 |
2,+5p | sed -n '2,+5p' 1.txt | 输出1.txt的第二行和第二行以后的5行 |
1~2p | sed -n '1~2p' 1.txt | 输出第一行,每隔两行输出一行,也就是输出奇数行 |
2~2p | sed -n '1~2p' 1.txt | 输出第二行,每隔两行输出一行,也就是输出偶数数行 |
/正则/p | sed -n '/^[0-9]/p' 1.txt | 输出1.txt以数字开头的行 |
$= | sed -n '$=' 1.txt | 输出1.txt的行数 |