SED命令

行编辑器

默认不编辑原文件仅对模式间的数据进行处理,处理结束后将模式空间打印至屏幕

sed ・address+command・ file ….

-i:直接修改原文件

-n:不再默认显示模式空间中的内容

-e SCRIPT:可以同时执行多个脚本

-f /PATH/TO/SCRIPT

-r:使用扩展正则表达式

Address

1 startlineendline

比如1.100

$:最后一行

2/RegExp/

/^root/

3/pattern1/,/pattern2/

第一次被pattern1匹配到的行开始至第一次被pattern2匹配到的行结束,这中间所有的行

4linenumber

指定的行

5startline+N

startline开始向后的N

Command

                d:删除符合条件的行

                p:显示符合条件的行

                a \string:在指定的行后面追加新行,内容为string

                I \string:在指定的行前面追加新行,内容为string

                r FILE:将指定的文件的内容添加至符合条件的行处

                w FILE:将指定的文件内容存之指定的文件中

                s /pattern/string/修饰符:查找并替换,默认只替换第一次被匹配到的字符串

                                g:全局替换

                                i:忽略大小写

                &:引用模式匹配

练习

1删除/etc/grub.conf文件中行首的空白符

sed �Cr `s@^[[ : space: ]] +@@g` /etc/grub.conf

2替换/etc/inittab文件中“id3initdefault一行中的数字为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 �Cr `s@^#[[ : space: ]]+@@g` /etc/inittab

6删除某文件中以空白字符后面跟#类的行中的开头的空白字符及#

sed �Cr `s@^[[ :space: ]]+#@@g` /etc/inittab

7取出一个文件路径的目录名称

echo “/etc/rc.d” | sed �Cr `s@^(/.*/) [^/]+/?@\1@g`

取出基名

echo “/etc/rc.d” | sed �Cr `s@^/.*/ ([^/]+)/?@\1@g`



你可能感兴趣的:(File,表达式,编辑器,空间)