文章目录
sed用法
用法如下:
sed [选项]... {脚本(如果没有其他脚本)} [输入文件]...
选项 | 解释 |
---|---|
-n | –quiet, --silent ,静默模式,不输出内容到屏幕 |
-e | –expression脚本,添加"脚本"到程序的运行列表 |
-f | –file脚本文件,添加"脚本文件"到程序的运行列表 |
-r | –regexp-exended,在脚本中使用扩展正则表达式 |
-i | –in-place,直接编辑文件 |
-i.bak | 备份文件并原处编辑 |
常用的编辑命令:
关键字 | 解释 |
---|---|
d | 删除匹配的行,并立即启用下一轮循环 |
p | 打印当前模式空间内容,追加到默认输出之后 |
a | 新增,a的后面可以接字符串,支持使用\n实现多行追加 |
i | 在行前面插入文本 |
c | 替换行为单行或多行文本 |
w | 保存模式匹配的行至指定文件 |
r | 读取指定文件的文本至模式空间中匹配到的行后 |
= | 模式空间中的行打印行号 |
! | 模式空间中匹配行取反处理 |
s/// | 查找替换,支持使用其他分隔符,s@@@,s###。替换标记:1.g行内全局替换2.p显示替换成功的行3.w newFile 将替换成功的行保存至文件中 |
sed实例用法
测试文件内容如下
[root@hadoop-master test-sed]# nl file.txt
1 leo hello-sed
2 leo2 hello2-sed
3 leo3 hello3-sed
4 hello se
5 aaa 111
6 bbb 222
7 ccc 333
1、打印文件的第2行
[root@hadoop-master test-sed]# nl file.txt | sed -n 2p
2 leo2 hello2-sed
2、打印文件的第2-5行
[root@hadoop-master test-sed]# nl file.txt | sed -n '2,5p'
2 leo2 hello2-sed
3 leo3 hello3-sed
4 hello se
5 aaa 111
3、删除第2行
[root@hadoop-master test-sed]# nl file.txt | sed '2d'
1 leo hello-sed
3 leo3 hello3-sed
4 hello se
5 aaa 111
6 bbb 222
7 ccc 333
4、删除第2-5行
[root@hadoop-master test-sed]# nl file.txt | sed '2,5d'
1 leo hello-sed
6 bbb 222
7 ccc 333
5、删除第2到最后一行
[root@hadoop-master test-sed]# nl file.txt | sed '2,$d'
1 leo hello-sed
6、追加“love china”
[root@hadoop-master test-sed]# nl file.txt | sed '2a love china\n'
1 leo hello-sed
2 leo2 hello2-sed
love china
3 leo3 hello3-sed
4 hello se
5 aaa 111
6 bbb 222
7 ccc 333
[root@hadoop-master test-sed]# nl file.txt | sed '2i love china'
1 leo hello-sed
love china
2 leo2 hello2-sed
3 leo3 hello3-sed
4 hello se
5 aaa 111
6 bbb 222
7 ccc 333
7、把2-5行替换成"china"
[root@hadoop-master test-sed]# nl file.txt | sed '2,5c china'
1 leo hello-sed
china
6 bbb 222
7 ccc 333
8、只打印包含模板的行
[root@hadoop-master test-sed]# nl file.txt | sed -n '/leo/p'
1 leo hello-sed
2 leo2 hello2-sed
3 leo3 hello3-sed
9、只打印包不含模板的行
[root@hadoop-master test-sed]# nl file.txt | sed '/leo/d'
4 hello se
5 aaa 111
6 bbb 222
7 ccc 333
10、替换字符串
将leo替换为china
[root@hadoop-master test-sed]# nl file.txt | sed 's/leo/china/g'
1 china hello-sed
2 china2 hello2-sed
3 china3 hello3-sed
4 hello se
5 aaa 111
6 bbb 222
7 ccc 333