SED是一个非交互式文本编辑器,它可对文本文件和标准输入进行编辑,标准输入可以来自键盘输入、文本重定向、字符串、变量,甚至来自于管道的文本。
Sed工具在处理文本时默认把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space)。如果要将变化写入磁盘、文件需要使用-i参数。
sed命令语法参数格式:sed 参数 ‘sed内置命令字符‘ 输入文件;
一、sed 命令的参数选项及说明
参数选项
解释说明
-n
取消默认的sed的输出,常与sed内置命令的p连用
-i
直接修改文件内容,而不是输出到终端。如果不使用-i选项,则sed只是修改内存中的数据,并不会影响磁盘上的文件
-e
如果有多个sed内置命令,需要使用-e参数,使用情景如下
情景1:
sed -e ‘sed内置命令’ -e ‘sed内置命令’ haha.txt情景2:
sed -e ‘sed内置命令;sed内置命令’ haha.txt sed内置命令用分号隔开
二、sed内置命令字符的功能说明
sed的内置命令字符
解释说明
a\
在当前行后添加一行或多行
c\
用新文本修改(替换)当前行中的文本
i\
在当前行前插入文本
d
删除行
p
打印行
!
匹配所匹配的内容以外的所有内容
s///g或者s###g
用一个字符串替换另外一个字符串
s///G或者s###G
在一个字符串后面追加另外一个字符串
N
将当前读入行的下一行读取到当前的模式空间。
y
将一个字符替换成另外一个字符
三、sed的正则表达式
同grep的正则表达式,大同小异,见下:
https://blog.csdn.net/weixin_44571270/article/details/104071841
例题:匹配ip地址的sed命令
echo 172.16.177.76|sed -n '/^\([0-9]\{1,3\}\.\)\{3\}\([0-9]\{1,3\}\)$/p'
四、实战演练
(1)替换jfedu.txt文本中old为new:
sed ‘s/old/new/g’ jfedu.txt
(2)打印jfedu.txt文本第一行至第三行:
sed -n ‘1,3p’ jfedu.txt
(3)打印jfedu.txt文本中第一行与最后一行:
sed -n ‘1p;$p’ jfedu.txt
(4)删除jfedu.txt第一行至第三行、删除匹配行至最后一行:
sed ‘1,3d’ jfedu.txt
sed ‘/jfedu/,$d’ jfedu.txt
(5)删除jfedu.txt最后6行及删除最后一行:
for i in seq 1 6
;do sed -i ‘$d’ jfedu.txt ;done
sed ‘$d’ jfedu.txt
(6)删除jfedu.txt最后1行:
sed ‘$d’ jfedu.txt
(7)在jfedu.txt查找jfedu所在行,并在其下一行添加word字符,a表示在其下一行添加字符串:
sed ‘/jfedu/aword’ jfedu.txt
(8)在jfedu.txt查找jfedu所在行,并在其上一行添加word字符,i表示在其上一行添加字符串:
sed ‘/jfedu/iword’ jfedu.txt
(9)在jfedu.txt查找以test结尾的行尾添加字符串word,$表示结尾标识,&在Sed中表示添加:
sed ‘s/test$/&word/g’ jfedu.txt
(10)在jfedu.txt查找www的行,在其行首添加字符串word,^表示起始标识,&在Sed中表示添加:
sed ‘/www/s/^/&word/’ jfedu.txt
(11)多个sed命令组合,使用-e参数:
sed -e ‘/www.jd.com/s/^/&1./’ -e ‘s/www.jd.com$/&./g’ jfedu.txt
(12)多个sed命令组合,使用分号“;”分割:
sed -e ‘/www.jd.com/s/^/&1./;s/www.jd.com$/&./g’ jfedu.txt
(13)Sed读取系统变量,变量替换:
WEBSITE=WWW.JFEDU.NET
Sed “s/www.jd.com/$WEBSITE/g” jfedu.txt
(14)修改Selinux策略enforcing为disabled,查找/SELINUX/行,然后将其行enforcing值改成disabled、!s表示不包括SELINUX行:
sed -i ‘/SELINUX/s/enforcing/disabled/g’ /etc/selinux/config
sed -i ‘/SELINUX/!s/enforcing/disabled/g’ /etc/selinux/config
(15)合并上下两行,也即两行合并:
sed ‘N;s/\n/ /’ jfedu.txt