合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
stream editor行编辑器 流编辑器,逐行处理文本,行编辑器 ### sed模式空间 默认不编辑源文件,仅对模式空间中的文本进行处理,处屏幕理后,将模式空间中的打印 sed [option] 'AddressCommand' file … -n:静默模式,不再显示模式空间中的内容 -i:直接修改源文件 -e SCRIPT -e SCRIPT …:同时执行多个脚本 -f /path/to/script:命令 -r:使用扩展正则表达式 ### Address ~~~ 1、Startline,Endline 比如:1,100 2、/RegExp/ 比如/^root/ 3、/Pattern1/,/Pattern2/ 第一次被pattern匹配的行开始,至第一次被Pattern匹配的行结束,这中间的行 4、Linenumber 指定的行 5、Startline+n 从Startline开始,向后n行,共n+1行 6、Startline,/RegExp/ 7、/RegExp/,Endline ~~~ ### Command ~~~ d:删除符合条件的行 p:显示符合条件的行 a \string:在指定的行后追加新行,内容为string, -n可以换行 比如:sed "/^u/a\# hi,a good man.\n Hi,linux" inittab i \string:在指定的行前追加新行,内容为string r file:将指定的文件内容添加至匹配到的行后 w file:将匹配到的内容保存到新的路径 s/pattern/string/修饰符:查找并替换,默认只替换第一次匹配到的内容 g:全局替换 i:忽略大小写 &:引用模式匹配到的字符串 sed "s/l..e/l&r/g" sed.txt 也可以使用后向引用实现 sed "s/\(l..e\)/\1r/g" sed.txt 匹配的内容部分替换只能使用后向引用 sed "s/l\(..e\)/L\1/g" sed.txt ~~~ sed保留空间 ### sed练习 ~~~ 1、删除/etc/grub.conf文件中行首的空白符; sed -r 's@^[[:spapce:]]+@@g' /etc/grub.conf 2、替换/etc/inittab文件中"id:3:initdefault:"一行中的数字为5; sed 's@\(id:\)[0-9]\(:initdefault:\)@\15\2@g' /etc/inittab 3、删除/etc/inittab文件中的空白行; sed '/^$/d' /etc/inittab 4、删除/etc/inittab文件中开头的#号; sed 's@^#@@g' /etc/inittab 5、删除某文件中开头的#号及后面的空白字符,但要求#号后面必须有空白字符; sed -r 's@^#[[:space:]]+@@g' /etc/inittab 6、删除某文件中以空白字符后面跟#类的行中的开头的空白字符及# sed -r 's@^[[:space:]]+#@@g' /etc/inittab 7、取出一个文件路径的目录名称; echo "/etc/rc.d/" | sed -r 's@^(/.*/)[^/]+/?@\1@g' 基名: echo "/etc/rc.d/" | sed -r 's@^/.*/([^/]+)/?@\1@g' 8、删除行首的空白字符 history | sed "s/^[[:space:]]*//" ~~~