sed编辑器,处理文本过程如下:
sed把当前处理的行保存在一个临时缓冲区中,然后处理缓冲区中的行,完成后把该行发送到屏幕上。sed每处理完一行就将其从临时缓冲区删除,然后下一行读入,处理和显示。处理完输入文件的最后一行后,sed便结束运行。
sed [参数] '命令' file
sed中模式空间(临时)和保持空间
passwd代表文件名
1,查询语句
输出第三行
sed -n '3p' passwd
输出第3 到5行
sed -n '3,5p' passwd
删除第3到5行
sed -n '3,5d' passwd
表示查询出passwd文件中存在sbin字符的所有行并打印出来,其中两个/表示的是其中的是正则表达式,-n和/p是该命令的参数,需要联合使用:
sed -n ‘/sbin/p’ passwd
2,紧跟在s命令后的字符就是查找串和替换串之间的分隔符。分隔符默认为正斜杠,但可以改变。无论什么字符(换行符、反斜线除外),只要紧跟s命令,就成了新的串分隔符:
head -3 passwd | sed 's#bin#Replace#g
sed -n '1,3s' 's#bin#Replace#g' passwd
e选项:用于sed执行多个指令,指令放置顺序对最终结果有影响
head -5 passwd | sed -e '1,3d' -e 's/sh/Replace/g'
r命令:当匹配到bin时,就读入文件的内容
head -3 passwd | sed '/bin/r append.txt'
w命令:匹配到时,写入到文件中
sed -n '/hrwang/w me.txt' datafile
a命令:匹配到时追加到文件中
sed '/^hrwang/a append this line to file datafile
q命令:q命令将导致sed程序退出,不再进行其它的处理
sed '/hrwang/{s/hrwang/HRWANG/;q;}' datafile
3,sed命令:没有重定向不会真正修改源文件中的内容。sed不会更改文件内容
重定向指令为 >
或者使用指令 -i, 直接修改文件内容,不过-i会额外添加一行,造成误解,不可用
4,新增语句:
sed '1a the content append to file' passwd
sed '1i the content inset to the forward of first line' passwd
sed '1c replace the first line of file to this content' passwd
sed 's/false/true/' passwd # replace false in this line to true
sed '/hello/aworld' mk ##a代表指定行后增加新行
sed 's/hello/hello world/g' mk
sed 's/hello/hello world/g' mk
5 删除语句:
sed '/postgres/d' passwd # delete the line suit this rule
sed '2d' passwd # delete the second line
sed '/^UUID/d' mk
sed '/^$/d' mk
6 替换语句:
修改并修改文件
sed -i '/s/cpu_core=8/cpu_core=72/' mk
如果使用 ‘s/cpu_core=8/cpu_core=72/p' mk 此行后会新加一行cpu_core=72;
如果末尾加g,说明是全局替换
sed -i 's/westos/redhat/g' passwd
整行替换
sed '/hello/chello world' mk
使用i命令向数据流插入文本行,i命令会在指定行前增加一个新行
sed '/hello/iworld lee' mk
7 打印文本:
sed -n '/:/p' mk
sed -n '/^#/p' mk
sed -n '/^#/!p' mk
sed -n '1~2p' mk ##打印奇数行
sed -n '2~2p' mk ##打印偶数行
8 参数:
-e 默认情况:在处理输入时。sed后面直接添加编辑命令
当一条sed中执行多个编辑命令时,-e才有意义,且不可省略,其他无意义
-n参数:不会把缓冲区内容输入到屏幕上,结合p指令使用,只输出匹配的行
sed -n '/^#/p' lee_temp #输出以#开头行
sed -n '/n$/p' lee_temp #输出以n结尾行
sed -n 's///gp' #加g与不加g的区别是,加g意味着全行进行指令操作,不加的话,只将指令运用于第一个匹配到的位置