sed命令(文本编辑)
1.概述:
-
sed命令是利用脚本的指令来处理、编辑文本文件;
-
sed主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等;
2.用法:
格式:sed [参数]
常用参数:
-
-e或--expression=<script>:以选项中指定的script来处理输入的文本文件(默认选项)
-
-f<script文件>或--file=<script文件>:以选项中指定的script文件来处理输入的文本文件
-
-n或--quiet或--silent:只显示可匹配的行
-
-e:直接在命令行模式上进行sed动作编辑
-
-r:支持扩展正则表达式
-
-i:直接去修改文本内容
3.查询文本的方式:
使用行号和行号范围:
-
x:行号
-
x,y:从x到y行
-
x,y!:除x到y行
/pattern:查询包含模式的行
/pattern/,/pattern/:查询包含两个模式的行
/pattern/,y:y行内查询包含匹配模式的行
x,/pattern/:x行后查询包含匹配模式的行
4.编辑命令:
-
p:打印匹配的行
-
=:显示文件行号
-
a\:指定行号后添加新文本
-
i\:指定行号前添加新文本
-
d:删除定位行
-
c\:用新文本内容替换定位到的行
-
w filename:写文本到另一个文件中
-
r filename:读文本到另一文本到本文件中
-
s ///:替换
替换标记:
* g:行内全局替换
* p:显示替换成功的行
* w:将替换成功后的内容保存到指定文件中
分隔符:
* ///:
* @@@:
-
q:第一个模式匹配后立即退出
-
{}:在定位执行行的命令组,用;进行分隔
1.只打印文本的第1到4行内容
[root@localhost]# sed -n '1,4p' fstab
2.只打印文本中包含xfs的行
[root@localhost]# sed -n '/xfs/p' fstab
3.只打印文本中以UUID开头任意内容的行
[root@localhost]# sed -n '/^UUID=.*/p' fstab #.*:任意内容
4.只显示文件中以UUID开头任意内容所在行的行号
[root@localhost]# sed -n '/^UUID=.*/=' fstab
5.在/etc/hosts文件中第3行位置添加主机名解析内容
[root@localhost]# sed -i '3a\192.168.10.10 node1' /etc/hosts
6.删除上述添加的解析内容
[root@localhost]# sed -i '3d' /etc/hosts
7.替换以UUID开头任意内容所在行的内容
[root@localhost]# sed -i '/^UUID=.*/c\test......' fstab
8.将fstab文件中以#开头的所有内容保存至fstab_part文件中
[root@localhost]# sed '/^#.*/w fstab_part' fstab
9.将fstab_part文件内容读写到另一个文件1.txt文件中第2行以后位置
[root@localhost]# sed -i '2r fstab_part' 1.txt
10.将1.txt文本中hello全部替换成大写
[root@localhost]# sed -i 's/hello/HELLO/g' 1.txt
11.将替换的内容保存至1_part.txt文本中
[root@localhost]# sed 's/HELLO/Hi/g w 1_part.txt' 1.txt
12.为/tmp/1.txt文件中前3行的行首加#号
[root@localhost]# sed -i '1,3s@\(^.\)@#\1@g' /tmp/1.txt
13.将/tmp/1.txt文件中前10行的行首加#号取消
[root@localhost]# sed '1,10s@^#\+\(.*\)$@\1@g' /tmp/1.txt