Linux:sed

Linux:sed

【参考文章】: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的行数