码迷,mamicode.com
首页 > 其他好文 > 详细

sed命令 学习笔记

时间:2016-07-12 15:52:45      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:sed

sed 基本用法

sed : Stream EDitor 行编辑器      (全屏编辑器: vim)

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

sed [optiones] ‘ADDressCommand‘ file ...

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

       -i : 直接修改原文件

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

       -f /PATH/TO/SED_SCRIPT : 添加 "脚本文件" 到程序的运行列表

              sed -f /path/to/scripts file

       -r : 使用扩展正则表达式   ( 默认支持基本正则表达式 )


ADDress  地址表示

1 . StratLine , EndLine   比如 : 1 , 100

  $ 最后一行

  $-1 倒数第二行

2 . /RegExp/   比如 : /^root/

3 . /pattern1/ , /pattern2/      比如 : 第一次被 pattern1 匹配到的行开始, 至第一次被 pattern2 匹配到的行结束,这中间的所有行

4 . LineNumber   指定的行

5 . StartLine, +N      从 StartLine 开始, 向后的 N 行


Command:

d : 删除符合条件的行

[root@nono ~]# sed ‘5,$d‘ /etc/fstab       #删除 /etc/fstab 文件中的第五行到最后一行
[root@nono ~]# sed ‘/oot/d‘ /etc/fstab    #删除 /etc/fstab 文件中所有包含 oot 的行
[root@nono ~]# sed ‘1,+2d‘ /etc/fstab     #删除 /etc/fstab 文件中,第一行开始并向后两行的内容(3行)
[root@nono ~]# sed ‘1d‘ /etc/fstab          #只删除第一行
[root@nono ~]# sed ‘/^\//d‘ /etc/fstab     #删除以 / 开头的行, ^\/ ‘\‘为转译(使用字符本身的意义)

p : 显示符合条件的行

[root@nono ~]# sed -n ‘/^\//p‘ /etc/fstab  #只显示以 ‘\‘ 开头的行  -n:不显示模式空间中的内容

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

[root@nono ~]# sed ‘/^\//a \#hello word‘ /etc/fstab    #在 / 开头的行下面,追加 /#hello word
[root@nono ~]# sed ‘/^\//a \#hello word\n\#hello linux‘ /etc/fstab #追加两行 \n : 换行符

i \string : 在指定的行前面追加新行,内容为 "string"  用法与 a \string 相同

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

[root@nono ~]# sed ‘2r /etc/issue‘ /etc/fstab   #在 /etc/fstab 的第二行后面,添加文件 /etc/issue 的内容
[root@nono ~]# sed ‘1,2r /etc/issue‘ /etc/fstab  #在 /etc/fstab 的第一行,第二行后面分别添加 /etc/issue 的内容

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

[root@nono ~]# sed ‘/oot/w /tmp/oot.txt‘ /etc/fstab   #将 /etc/fstab 文件中包含 oot 的行,保存至 /tmp/oot.txt 文件中

s /pattern/string/修饰符 : 表示查找并替换  (默认只替换每行中第一次被模式匹配到的字符串)

         pattern : 可以使用正则表达式的元字符

         修饰符

         g : 全局替换

          i : 查找时忽略字符大小写

          s/// : s### : s@@@  作用相同 

[root@nono ~]# sed ‘s@/@#@g‘ /etc/fstab     #将 /etc/fstab 文件中的 / 替换为 # (g 全局替换)
[root@nono ~]# history | sed ‘s#^[[:space:]]*##‘   #将 history 行首的空格删除 (可以删除多个空白字符)

练习 

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

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

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

    sed ‘/^$/d‘ /etc/inittab

  3. 删除 /etc/inittab 文件中开头的 # 号

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

  4. 删除某文件中开头的#号及后面的空白字符,但要求#号后面必须有空白字符

    sed -r ‘s@^#[[:space:]]+@@g‘ /etc/inittab

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

    sed -r ‘s@^[[:space:]]+#@@g‘ /etc/inittab

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

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

技术分享

sed命令 学习笔记

标签:sed

原文地址:http://aby028.blog.51cto.com/5371905/1825600

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!