sed的介绍
sed是Linux下一款功能强大的非交互流式文本编辑器,可以对文本文件进行增、删、改、查等操作,支持按行、按字段、按正则匹配文本内容,灵活方便,特别适合于大文件的编辑
sed在处理文本时是逐行读取文件内容,读到匹配的行就根据指令做操作,不匹配就跳过
需要注意,sed 所做的修改并不会直接改变文件的内容(如果是用管道符接收的命令的输出,则连文件都没有),而是把修改结果只显示到屏幕上,除非使用"-i"选项才会直接修改文件。
大多数小伙伴之所以觉得难,是因为sed 拥有的参数太多,实际上,我们只要学会以下参数就可以。
sed的参数导图
常用选项:
-n:使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。
但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e:直接在指令列模式上进行 sed 的动作编辑;
-f:直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;
-r:sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
-i:直接修改读取的档案内容,而不是由萤幕输出。
常用命令:
a:新增, a 的后面可以接字串,而这些字串会在新的一行出现;
c:取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行;
d:删除,因为是删除,所以 d 后面通常不接任何字符;
i:插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p:列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作;
s:取代,可以直接进行取代的工作!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g!
g:是行内进行全局替换
sed工具实例
2.1 替换test.txt文本中old为new:
sed 's/old/new/g' test.txt
2.2 打印test.txt文本第一行至第三行:
sed -n '1,3p' test.txt
2.3 打印test.txt文本中首行和尾行:
sed -n '1p;$p' test.txt
2.4 删除test.txt第一行至第三行;删除匹配行至最后一行:
sed '1,3d' test.txt
sed '/测试/,$d' test.txt
2.5 删除test.txt最后6行;删除最后一行:
for i in `seq 1 6`;do sed -i '$d' test.txt;done;
sed '$d' test.txt
2.6 在test.txt查找测试所在行,并在其下一行添加word字符,a表示在其下一行添加字符串:
sed '/测试/aword' test.txt
2.7 在test.txt查找测试所在行,并在其上一行添加word字符,i 表示在其上一行添加字符串:
sed '/测试/iword' test.txt
2.8 在test.txt查找以测试结尾的行尾添加字符串word,$表示结尾标识,&在Sed中表示添加:
sed 's/测试$/&word/g' test.txt
2.9 在test.txt查找测试的行,在其行首添加字符串word,^表示起始标识,&在Sed中表示添加:
sed '/测试/s/^/&word/' test.txt
2.10 多个sed命令组合,使用-e参数:在含测试字符的行首加1.并在结尾是检测字符处加.
sed -e '/测试/s/^/&1./' -e 's/检测$/&./g' test.txt
2.11 多个sed命令组合,使用分号“;”分割:
sed -e '/测试/s/^/&1./;s/检测$/&./g' test.txt
2.12 Sed读取系统变量,变量替换:
WEBSITE=www.test.net
sed "s/测试/$WEBSITE/g" test.txt
2.13 修改Selinux策略enforcing为disabled:
sed -i '/SELINUX/s/enforcing/disabled/g' /etc/selinux/config
sed -i '/SELINUX/!s/enforcing/disabled/g' /etc/selinux/config
查找/SELINUX/行,然后将其行enforcing值改成disabled、!s表示不包括SELINUX行
2.14 打印文件的行号
[root@itlaoxin41 ~]# sed -n '$=' /etc/passwd
44
总结
带的学员越多,越发现sed最难的地方不是知识本身,而是畏难情绪,总觉得一个命令弄这么多参数,这可怎么学啊。
实际上每个参数多练一练,还是很容易学会的。