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;
d’ jfedu.txt
(5)删除jfedu.txt最后6行及删除最后一行:
for i in seq 1 6
;do sed -i ‘
d’ jfedu.txt
(6)删除jfedu.txt最后1行:
sed '
表示结尾标识,&在Sed中表示添加:
sed ‘s/testKaTeX parse error: Expected 'EOF', got '&' at position 2: /&̲word/g' jfe…/&./g’ jfedu.txt
(12)多个sed命令组合,使用分号“;”分割:
sed -e '/www.jd.com/s/^/&1./;s/www.jd.comKaTeX parse error: Expected 'EOF', got '&' at position 2: /&̲./g' jfedu.txt…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