1.简介
sed命令不会修改文件的内容,除非使用shell的I/O重定向,默认所有的输出行都输出到标准输出中。
2.过滤(定址)
可以使用过滤条件确定需要编辑的行,数字、正则、前两者结合,如果没有过滤,则默认输出所有行。
a.地址是一个数字则表示行号,是"$"符号则表示最后一行:
$sed -n '3p' a.txt
只输出第三行
b.可以指定行号范围:
$sed '100,200p' a.txt
输出第100行到第200行
c.地址是以","分割,可以是数字、正则、两者结合的表达式
#删除第2到第5行 sed '2,5d' a.txt #删除包含"john"的行到第10行 sed '/john/,10d' a.txt #删除包含"john"的行到包含"lili"的行 sed '/john/,/lili/' a.txt
3.命令与选项
a\命令:在当前行后添加一行或多行,多行时除最后一行需要用\续行
#在文件learn.txt中的含有cat的行后插入内容为aaa、bbb的两行 sed '/cat/a\ aaa\ bbb' learn.txt
c\命令:用该命令后的新文本替换当前行的文本。多行时除最后一行要用\续行
#用aaa bbb替换含有cat的行 sed '/cat/c\ aaa\ bbb' learn.txt
i\命令:在当前行之前插入新文本,新文本为多行时除最后一行需要用\续行
#在含有cat的行之前插入aaaa bbbb sed '/cat/i\ aaaa\ bbbb' learn.txt
d命令:删除行
#删除最后一行 sed '$d' learn.txt #删除含有cat的行 sed '/cat/d' learn.txt
p命令:显示内容
#默认打印所有行,并将含有cat的行另外打印一遍 sed '/cat/p' learn.txt #加入-n后取消默认打印,p命令只把含有cat的行打印一遍 sed -n '/cat/p' learn.txt
s命令:文本替换
#在含有cat的行中将所有cat替换为dog sed 's/cat/dog/g' learn.txt