sed 是一种在线的、非交互式的编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。
接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;
1 sed 选项 命令 文件
sed [options] 'command' file(s)
2 sed 选项 –f 脚本 文件
sed [options] -f scriptfile file(s)
-可以把想替换的写成一个脚本 这样可以替换多次
与grep一样,sed在文件中查找模式时也可以使用正则表达式(RE)和各种元字符。
正则表达式是括在斜杠间的模式,用于查找和替换,以下是sed支持的元字符。
使用基本元字符集 ^, $, ., *, [], [^], \< \>,\(\),\{
\}
使用扩展元字符集 ?, +, |, ( )
使用扩展元字符的方式:
\+ 转义
sed -r 加-r
-r 参数不会修改内容,支持正则表达式。
-i 直接修改内容
sed -r '/root/d' passwd 匹配词组删除
sed -r '3d' passwd 通过行号删除
sed -r '3{d}' passwd 和上面的一样这个{
}可以省略
sed -r '3{d;}' passwd {
存放sed的多个命令} 3{
h;d},h暂存空间
sed -r '3,$d' passwd 删除3到最后一行
sed -r '$d' passwd 只把最后一行删除了
sed -r 's/root/aofa/' passwd 把root换成aofa
sed -r 's/root/aofa/g' passwd 默认之换每一行的第一个
sed -r 's/^root/aofa/' passwd 以root开始的词组,替换成aofa
sed -r 's/[0-9][0-9]$/&.5/' passwd
查找双数 结尾的词组
&:替换成 双数.5
&有查询结果的含义。
sed -r 's/(mail)/E\1/g' passwd ()括号组合字符,\1调用括号
sed -r 's#(mail)#E\1#g' passwd 分隔符可以换成井号
sed -r '$r 1.txt' passwd 在最后一行,读取插入新文件1.txt
sed -r '/root/r 1.txt' passwd 正则搜寻root 在root后面读取插入新文文件
sed -r 'w 111.txt' 1.txt 把1.txt全部内容 写入111.txt
sed -r '/root/w 123.txt' passwd 把passwd的文件中有root的行另存为到123.txt
sed -r '1,5w 123.txt' passwd 把1,5行另存为123.txt
sed -r 'a123' passwd 每行后面,都加上123行
sed -r '2a 123' passwd 在第2行后面,加上123
sed -r '$a 123' passwd 在最后一行后面,加上123
sed -r '2a 1111\
> 3333333\
> 444444' passwd 插入段落,请使用\转义掉回车,不要忘了分号结束
sed -r '2iaaaaaaaa' passwd 在第二行插入新行aaaaaaaaaa
sed -r ‘2caaaaaaaa’ passwd 把第二行替换成aaaaaaaaa
sed -r '/root/{n;d}' passwd n下一行的意思。找root行,然后下一行,删除
sed -r '/root/{n;n;d}' passwd n:next下一行可以用多次。
sed -r '/root/{n;s/bin/ding/g}' passwd {
命令组合} 找到root行,下一行查找替换
sed -r '2,$d' passwd 删除第二行到最后一行
sed -r '2,$!d' passwd 加了!号除了第二行到最后一行 其余的都删除
sed -r -e '1,3d' -e '4s/adm/admin/g' passwd 执行多个操作
h--------覆盖暂存空间
H--------追加暂存空间
g--------覆盖行
G--------追加行
x--------模式空间和暂存空间互换
sed -r '1h;$G' passwd.txt
//把第一行覆盖到暂存空间,在最后一行的时候将模式空间的内容追加到最后一行下面
sed -r '1{h;d};$G' passwd.txt
//把第一行覆盖到暂存空间并删除,在最后一行在调用追加,相当于把第一行剪切到最后一行
sed -r '1h;2,$g' passwd.txt
//把第一行覆盖到暂存空间,从第二行到最后一行,每读一行就从暂存空间调回来,这里用的g表示覆盖,因此每调用一次都会把原来的内容覆盖掉,这样整个文本都会和第一行一样
sed -r '1h;2,3H;$G' passwd.txt
//把第一行覆盖到暂存空间,第二行第三行追加到暂存空间,在最后一行的时候在调用暂存空间的内容,这里的动作是追加
sed -r ‘4h;5x;6G’passwd
处理过程:
拿出第一行进入模式空间匹配指令没有说第一行处理完成输出到屏幕上
到了第四行进入模式空间h指令抄一份放到暂存空间然后输出到屏幕
第五行进入模式空间x指令和暂存空间互换输出到屏幕是第四行的内容
第六行进入模式空间G指令把暂存空间的内容(第5行的内容)追加到第六行的后面