1.注释一行
sed -e 's/.*/#&/' file
其中&是替换元字符,代表正则表达式所匹配到的内容
2.替换
sed -e 's/reg/newstr/g' file
sed -e 's/\(reg\)/\1newstr/g' file
其中\(reg\)可以在替换字符串中通过\1 \2这种方式引用
/reg/\
/g
将某符合正则的串替换为换行符,这种写法一般用在sed脚本文件中。
3.删除
sed -e '1d' file
sed -e '/^$/d' file
删除命令会删除符合正则的一整行,并且脚本回到脚本开头,读入新的一行。
4.追加
sed -e '1a hhh' file
追加命令在模式空间的下一行添加字符串
5.更改
sed -e '1c newstr' file
将模式空间替换为newstr,即符合条件的那一行被替换成newstr
6.插入
sed -e '2i insertstr' file
将innsertstr插入到第二行之前
7.转换
sed -e '1,3y/abc/ABC/' file
将指定范围内的a,b,c分别替换成A,B,C
8.打印行号
sed -e '/reg/=' file
打印符合某正则的行号
9.下一步
/reg/{
n
/^$/d
}
找到符合reg的下一行,如果是空行就删除
10.写文件
sed '1,2w newfile' file
会将file文件的1,2两行写入newfile,如果newfile没有会自动创建,该写入是覆盖式写入
11.读文件
sed '1,2r file2' file1
将file2文件全部内容读入到file1的1行下面
12.退出执行脚本
sed '1q' file
到第一行就退出
13.追加下一行
/reg/{
N
s/reg1/val/
}
将符合reg的下一行读取到模式空间,然后执行操作,N后面的正则,^表示整个模式空间的开始,$表示整个模式空间的结尾,而不是每一个独立航的换行
14.缓存某个字符串
h,H,g,G,x
h将模式空间的内容保存到保持空间,其会刷新保持空间,H将模式空间的内容追加到保持空间。
g将保持空间的内容取回到模式空间,其会刷新模式空间,G将保持空间的内容追加到模式空间
x交换保持空间与模式空间。
例子:交换1与2的位置
111
222
1111
2222
11111
22222
脚本:
/1/{
h
d
}
/2/{
G
}
解读,先匹配包含1的行,把这一行存入保持空间,并删除这一行,这样脚本读入新的一行从头执行,读入222,匹配/2/,用保持空间的内容替换模式空间的内容
15.分支
[address]b
[address]b label
:label
b后面接标签,类似于c的jump,如果后面不接,那么执行流会直接走到脚本底部
例子:
:top
command1
command2
/reg/b top
command3
这段脚本command1,command2先执行,如果模式符合reg,那么执行流会回到command1,又走一遍command1,command2,然后再判断是否符合模式,最后执行command3。
command1
/reg/b end
command2
:end{
command3
command4
command5
}
标签执行多个命令
16.测试命令
[address]t [label]
如果在当前行执行了成功的替换,那么t命令会转到标签,t后面如果不接标签就走到脚本末尾,类似c的switch case