
shell四剑客 · sed
SED是一个非交互式文本编辑器,它可对文本文件和标准输入进行编辑,标准输入可以来自键盘输入、文本重定向、字符串、变量,甚至来自于管道的文本,与VIM编辑器类似,它一次处理一行内容,Sed可以编辑一个或多个文件,简化对文件的反复操作、编写转换程序等。
在处理文本时把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),紧接着用SED命令处理缓冲区中的内容,处理完成后把缓冲区的内容输出至屏幕或者写入文件。
逐行处理直到文件末尾,然而如果打印在屏幕上,实质文件内容并没有改变,除非你使用重定向存储输出或者写入文件。其语法参数格式为:
用法
sed [Options] 'Commands' filename
参数解释:
-e
:允许多个编辑命令,可以一次性执行多个编辑操作。-n
:禁止自动打印模式空间的内容。-i
:直接修改文件内容,而不是输出到标准输出。-r
或-E
:启用扩展正则表达式。-f
:从指定文件中读取sed
脚本。
案例
替换
yuedu.txt
文本中old
为new
sed 's/old/new/g' yuedu.txt
打印
yuedu.txt
文本第一行至第三行:
sed -n '1,3p' yuedu.txt
打印
yuedu.txt
文本中第一行与最后一行:
sed -n '1p;$p' yuedu.txt
删除
yuedu.txt
第一行至第三行、删除匹配行至最后一行:
sed '1,3d' yuedu.txt
sed '/yuedu/,$d' yuedu.txt
删除
yuedu.txt
最后6行及删除最后一行:
# N;N;N;N;N;N:连续执行 6 次 N 命令,将模式空间中的行向下移动 6 行,相当于删除了最后 6 行
sed -i '$d;N;N;N;N;N;N' yuedu.txt
在
yuedu.txt
查找yuedu
所在行,并在其下一行添加word
字符,a
表示在其下一行添加字符串:
sed '/yuedu/a\word' yuedu.txt
在
yuedu.txt
查找yuedu
所在行,并在其上一行添加word
字符,i
表示在其上一行添加字符串
sed '/yuedu/i\word' yuedu.txt
在
yuedu.txt
查找www
的行,在其行首添加字符串word
,^
表示起始标识,&
在Sed
中表示添加:
sed 's/test$/&word/g' yuedu.txt
sed '/www/s/^/&word/' yuedu.txt
多个
sed
命令组合,使用-e
参数:
sed -e '/www.jd.com/s/^/&1./' -e 's/www.jd.com$/&./g' yuedu.txt
修改
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
合并上下两行,也即两行合并:
sed 'N;s/\n/ /' yuedu.txt