首页 > 代码库 > SED流式编辑器

SED流式编辑器

                                                                                            SED流式编辑器

1.SED的工作机制
    sed处理文本文件时,首先会被读到模式空间中,而不修改原文件。sed可以对文本文件的所有行进行操作,也可以通过正则表达式进行匹配,使得sed可以只处理模式空间中的被正则表达式匹配到的行。
    然后再判断模式空间中的文本是否会被正则表达式匹配到,如果匹配到,就会对匹配到的文本做编辑操作,之后再将被编辑的文本和没有被编辑的文本一同输出到标准输出。
    如果模式空间没有被正则表达式匹配到,直接将没有被匹配到的文本原样输出至标准输出。

2.SED的用法
   sed  【选项】 脚本  文件

3.常用的选项
     -n:不输出模式模式中的内容至屏幕,也就是不会将没有匹配到的文本输出到标准输出,只是输出编辑到文本
     -e 脚本:可以指定多个脚本,实现多次编辑
     -f 脚本文件:每一行一个编辑命令
     -i:直接修改原文件
     -r:表示使用扩展的正则表达式

4.地址定界
地址定界(与vim的末行模式类似)
        (1)全文匹配:不需要给定地址,表示全文匹配,而vim需要给定%表示全文匹配
        (2)单地址匹配:写一个数字即可,例如:8表示匹配第8行
        (3)多地址匹配:给定一个范围,
          例如:1,9 表示匹配第1行到第9行
          例如:1,+2 表示匹配第一行到第三行
        (4)模式匹配:
          例如:/正则表达式/  表示正则表达式匹配到的行
          例如:1,/正则表达式/ 表示从第一行到正则表达式匹配到的行
        (5)步长匹配
          例如:1~2  表示所有奇数行
          例如:2~2  表示所有偶数行
5.编辑命令
    d:删除
例如:cat  123
111
222
333
[root@bxb ~]# sed ‘1,2d‘ 123
333
[root@bxb ~]# sed ‘/^#/d‘ /etc/fstab  //删除/etc/fstab文件中以#开头的行


    p:打印     //一定要-n选项,如果不加-n那么打印的行将会显示两遍
[root@bxb ~]# sed -n ‘3,4p‘ /etc/fstab  //打印/etc/fstab/的文件的三四行


    a\字符串:在行后面加字符串,支持使用\n实现多行追加
例如:sed ‘5a\new_line‘ /etc/fstab:表示在第五行后面,也就是第六行插入new_line字符串,其后的行一次向下移动
w 文件路径:将匹配到的行重定向至指定的文件中
例如:sed ‘/^[^#]/w yhy.txt‘ /etc/fstab  将非井号开头的行保存至yes.txt文件中

    r 文件路径:读取指定文件的内容插入到当前文件被匹配到的行处
例如: sed ‘3r /etc/issue‘ /etc/fstab 将/etc/issue中的内容插入到第3行的文本后面

    =:表示被模式匹配到的行上面加上一个行号
sed ‘/^UUID/=‘ /etc/fstab

   :取反条件
例如:sed ‘/^#/!d‘ /etc/fstab   将不是以#好开头的行删除

   s///:查找替换,常用的有s@@@, s### ,


    修饰符有:
        g:全局替换,表示可以替换一行中多次匹配到的字符串。如果不加g,那么只能替换一行中第一次出现的字符串
        w 文件路径:替换成功的结果保存至指定文件中
        p :显示替换成功的行
   

SED流式编辑器