sed 常用方法 脚本范例

sed练习

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

   sed -r ‘s@^[[:space:]]+@@g' /etc/grub.conf

 2:替换/etc/inittab文件中“id:3:initdaefault:”一行中的数字为5

   sed 's@\(id:\)[0-9]\(:initdefault:\)@\15\2@g' /etc/inittab

 3:删除/etc/inittab文件中的空白行字符

   sed '/^$/d' /etc/inittab 

   sed -r 's@^#[[:space:]]+@@g' /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' 

 8:取出一个文件路径的文件名称

   echo "/etc/rc.d" | sed -r 's@^/.*/([^/]+)/?@\1@g'

 9:递归替换

    sed -i 's/abc/bcd/g' `grep "abc" -rl /usr/local/src/zhangys/`


以下是


sed 基本用法

行编辑器(全屏编辑器:vi、)


模式空间:默认不编辑源文件,仅对末世空间中的数据做处理;而后,处理结束后,将模式空间打印至屏幕 。

  


sed 【options】选项 address地址commond命令 file。。。文件

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

     -i:可以直接修改原文件

     -e:-e脚本-e脚本可以执行多个脚本

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

Address:

1> StartLine, EndLine

比如1,100 从第1行到100行

$: 最后一行

$-1:倒数第二行


2> /RegExp/

/^root/找这个文件中所有以root字符串开头的行

例:sed ‘/root/d’ /etc/fstab 删除文件中所有的root


3> /pattern1/,/pattern2/

第1次被模式1匹配到的行开始,至第1次被模式2匹配到的行结束


4> LineNumber

        指定的行


5> StartLine,+N

从StarLine开始,向后的N行

例:sed ‘1,+2d’ /etc/fstab删除3行


Command:

d:删除符合条件的行;

例:sed ‘1,2d’ /etc/fstab删除前两行


p:显示符合条件的行

例:sed‘/^\//d’ /etc/fstab删除以斜线开头的行

   sed -n '/^\//p' /etc/fstab 显示以斜杠开头的行


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

例:sed ‘/^\//a \// hello world’/etc/fstab


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


r FILE:用于合并文件

sed ‘2r /etc/issue’ /etc/fstab 

将文件issue里的内容粘贴到fstab的第二行

w FILE:将指定范围内的内容另存至指定的文件中

例:sed -n‘/oot/w /tmp/oot.txt' /etc/fstab

-n的作用 禁止打印模式空间的内容


s/pattern模式/string字符串/:查找并替换

  g:全局替换 

  i:忽略字符大小写

例:sed‘s/oot/OOT/’/etc/fstab

例:sed ‘s/^\//#/' /etc/fstab将行首斜线替换成井号

例:sed 's/\//#/' /etc/fstab替换每一行第一次被模式匹配到的串

例:sed 's/\//#/g' /etc/fstab 全局替换成没有

                                i:查找时忽略大小写

例:sed 's#\(l..e\)#\1r#e' sed.txt将所有l开头e结尾的字符创后面加上r




  例:sed ‘s#\(l..e\)#\1r#g’ sed.txt   在like love 后面加r

    等同于 sed ‘s#l..e#&r#g’ sed.txt

   



练习:

1取出一个文件路径的父目录名称  如/etc

echo "/etc/rc.d" | sed -r 's@^(/.*/)[^/]+/?@\1@g'

保留其子目录名

echo "/etc/rc.d" | sed -r 's@^/.*/([^/]+)/?@\1@g'


2删除/etc/greb.conf文件中行首的空白符

sed '/^$/d' /etc/inittab


3替换/etc/inittab文件中“id:3:initdefault:”一行中的数字为5;


4删除/etc/inittab文件中开头的#号(井号后面必须有空白字符)

sed 's@^#@@g' /etc/inittab


5删除/etc/inittab文件中的空白行


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








你可能感兴趣的:(sed)