sed是一个非交互式的文本处理工具,它默认不会修改源文件,它是把文件中的内容逐行copy到缓冲区,然后在缓冲区中进行处理,最后把处理的结果显示到屏幕上并清空缓冲区
然后再从文件中读取下一行到缓冲区,重复这个过程,直到所有的行都处理完。如果设置了处理行范围则只处理范围内的行,没有指定时则处理所有的行。

处理选定的行
使用数字表示地址行号,$符号表示最后一行。
# 只查看文件的第3行
sed -n '3p' datafile
# 只查看文件的第100行到第200行 
sed -n '100,200p' mysql_slow_query.log
2个地址使用“,”分割,表示在这2个范围之间,前后地址可以使用正则或数字表示。
sed '2,5d' datafile
#删除第二到第五行
sed '/My/,/You/d' datafile
#删除包含"My"的行到包含"You"的行之间的行
sed '/My/,10d' datafile
#删除包含"My"的行到第十行的内容

sed工具的命令与选项

选项
-e 进行多重编辑,即对在缓冲区的这一行做连续编辑;前面的编辑完,后面的接着编辑。
-n 取消默认的输出
-f 指定sed脚本的文件名
命令
d 删除行
p 打印行
s 用一个字符串替换另一个
g 在行内进行全局替换
 
正则表达式
sed使用的正则表达式是括在斜杠线"/"之间的模式。
^ 行首定位符 /^my/ 匹配所有以my开头的行
$ 行尾定位符 /my$/ 匹配所有以my结尾的行
. 匹配除换行符以外的单个字符 /m..y/ 匹配包含字母m,后跟两个任意字符,再跟字母y的行
* 匹配零个或多个前导字符 /my*/ 匹配包含字母m,后跟零个或多个y字母的行
[] 匹配指定字符组内的任一字符 /[Mm]y/ 匹配包含My或my的行
 
常见使用方式
p命令
p: 打印指令,n: 取消默认打印。两个同时使用,表示只打印选定的行。
sed '/my/p' datafile
#默认情况下,sed把所有输入行都打印在标准输出上。如果某行匹配模式my,p命令将把该行另外打印一遍。
sed -n '/my/p' datafile
#选项-n取消sed默认的打印,p命令把匹配模式my的行打印一遍。
d命令
删除选定的行
sed '$d' datafile
#删除最后一行,其余的都被显示
sed '/my/d' datafile
#删除包含my的行,其余的都被显示
s命令
字符串替换
sed 's/^My/You/g' datafile
#命令末端的g表示在行内进行全局替换,也就是说如果某行出现多个My,所有的My都被替换为You。
sed -n '1,20s/My$/You/gp' datafile
#取消默认输出,处理1到20行里匹配以My结尾的行,把行内所有的My替换为You,并打印到屏幕上。
 
e选项
连续编辑,对应缓冲区的一行文本,做顺序的连续编辑处理
sed -e '1,10d' -e 's/My/Your/g' datafile
#选项-e用于进行多重编辑。第一重编辑删除第1-10行。第二重编辑将出现的所有My替换为Your。因为是逐行进行这两项编辑(即这两个命令都在模式空间的当前行上执行),所以编辑命令的顺序会影响结果。

 

参考文章:https://blog.csdn.net/gua___gua/article/details/49304699