标签:
sed基本用法:
sed: Stream Editor 行编辑器,同vi编辑器不一样的是,vi编辑器是全屏编辑器。
sed:模式空间
默认不编辑原文件,仅对模式空间中的数据做处理;而后,处理结束后,将模式空间打印至屏幕;
sed [options] ‘AddressCommand‘ file...
-n:静默模式,不在默认显示模式空间中的内容
-i:直接修改原始文件
-e SCRIPT -e SCRIPT:可以同时执行多个脚本
-f /PATH/TO/SED_SCRIPT
sed -f /path/to/scripts file
-r 表示使用扩展正则表达式
关于Address的说明:
StartLine,EndLine 比如1,100 $:最后一行
/RegExp/ /^root/
/pattern1/,/pattern2/ 第一次被pattern1匹配到的行开始,至第一次被pattern2匹配到的行结束,这中间的所有行
lineNumber:指定的行
StartLine,+N 从startline开始,向后的N行。
关于Command的说明:
d: 删除符合条件的行
p: 显示符合条件的行
a \String :在指定的行后面追加新行,内容为string
i \String :在指定的行前面添加新行,内容为string
r FILE:将指定的文件的内容添加至符合条件的行处
w FILE : 将地址指定的范围内的行另存为指定的文件中
s/pattern/string/修饰符 :查找并替换,默认只替换每行中第一次被模式匹配到的字符串
加修饰符: g:全局替换 i:忽略字符大小写
其实 s///,s###,s@@@都是一样的, \(\) ,\1,\2
&:引用模式匹配整个串。
练习:
删除/etc/grub.conf文件中行首的空白符
sed -r ‘s/^[[:space:]]+//g‘ /etc/grub.conf
替换/etc/inittab文件中“id:3:initdefault:”一行中的数字为5
sed -r ‘s#^\(id:\):[[:digit:]]\(:initdefault:\)#\15\2#g‘
删除/etc/inittab文件中的空白行
sed -r ‘/^$/d‘ /etc/inittab
删除/etc/inittab文件中开头的#号
sed -r ‘s/^#//g‘ /etc/inittab
删除某文件(/etc/inittab)中开头的#号及后面的空白字符,但要求#号后面必须有空白字符
sed -r ‘s/^#[[:space:]]+//g‘ /etc/inittab
取出一个文件路径的目录名称
sed -r ‘s@^(/.*/)[^/]+/?@\1@g‘
取出一个文件路径的文件名称
sed -r ‘s@^/.*/([^/]+)/?@\1@g‘
标签:
原文地址:http://my.oschina.net/alfredliukai/blog/496911