man sed
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
OPTION
-n, --quiet, --silent 取消默认输出,只显示script处理后的结果
-e script, --expression=script 以指定的script来执行
-f script-file, --file=script-file 以指定的script文件来执行
-i [SUFFIX], --in-place[=SUFFIX] 编辑原始文件 慎用
If no -e, --expression, -f, or --file option is given, then the first non-option argument
is taken as the sed script to interpret. All remaining arguments are names of input files;
if no input files are specified, then the standard input is read
命令简介
a # append ,新增,在指定行的下面
i # insert ,新增,在指定行的上面
d # delete 删除指定行
# 注意非g结尾,最后/不要忘了
s/regexp/replacement/ # 替换 比如1,20s/regexp/replacement/g
demo
原始文件
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
myroot:x:0:0:myroot:/myroot:/bin/bash
替换类
# 把全部的root替换成admin
sed s/root/admin/g mypasswd
nl -n ln mypasswd |sed s/admin/root/g
# 匹配行第3个的root替换成admin
cat mypasswd |sed s/root/admin/3
# 匹配行的第一个root替换成admin
cat mypasswd |sed s/root/admin/
# 匹配行会打印 1条匹配的记录会打印2次
cat mypasswd |sed s/root/admin/p
# 把匹配的内容,保存到当前目类下的pas1文件中 w另存为
cat mypasswd |sed -n 's/root/admin/gw pas1'
# 每行都注释 #
sed 's/^/#/' pas1
# 删掉文件中的第1个字符
sed 's/^.//1' pas1
# 删掉文件中的第2个字符
sed 's/.//2' pas1
插入类
# 第一行 插入 ------begin--------
# 这是第一行之前,也就是真正的第一行
cat mypasswd |sed '1i ------begin--------'
# 最后1行之后 插入------the end--------
# 最后1行之后
cat mypasswd |sed '$a ------the end--------'
删除类
# 删除第1行
nl mypasswd |sed 1d
删除2-5行
nl mypasswd |sed 2,5d
打印
# 打印2-5行 如果不加-n,则2-5行会打印2遍
sed -n '2,5p' mypasswd
# 打印第1行
sed -n '1p' mypasswd
# 打印最后1行
sed -n '$ p' mypasswd
# 打印奇数行
sed -n '1~2 p' mypasswd
# 打印偶数行
sed -n '0~2 p' mypasswd
# 显示最后一行行数(某个文件总行数) 和 wc -l 功能一样
sed -n '$=' mypasswd