一.Sed 知识预热;

sed的处理流程,简化后是这样的:


1.读入新的一行内容到缓存空间;

2.从指定的操作指令中取出第一条指令,判断是否匹配pattern;

3.如果不匹配,则忽略后续的编辑命令,回到第2步继续取出下一条指令;

4.如果匹配,则针对缓存的行执行后续的编辑命令;完成后,回到第2步继续取出下一条指令;

5.当所有指令都应用之后,输出缓存行的内容;回到第1步继续读入下一行内容;

6.当所有行都处理完之后,结束;


正则表达式介绍;


  1. ^锚定行的开始如:/^sed/匹配所有以sed开头的行。

  2. $锚定行的结束 如:/sed$/匹配所有以sed结尾的行。

  3. .匹配一个非换行符的字符 如:/s.d/匹配s后接一个任意字符,然后是d。

  4. *匹配零或多个字符 如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。

  5. []匹配一个指定范围内的字符,如/[Ss]ed/匹配sed和Sed。

  6. [^]匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。

  7. \(..\)保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。

  8. &;保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。

  9. \<;锚定单词的开始,如:/\<love/匹配包含以love开头的单词的行。

  10. \>;锚定单词的结束,如/love\>/匹配包含以love结尾的单词的行。

  11. x\{m\}重复字符x,m次,如:/0\{5\}/匹配包含5个o的行。

  12. x\{m,\}重复字符x,至少m次,如:/o\{5,\}/匹配至少有5个o的行。

  13. x\{m,n\}重复字符x,至少m次,不多于n次,如:/o\{5,10\}/匹配5--10个o的行。


Sed 常用选项介绍;

sed命令行格式为:
                        sed [-nefri]  ‘command’  输入文本/文件       

常用选项;
        
-n∶取消默认的输出,使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来
        -e∶进行多项编辑,即对输入行应用多条sed命令时使用. 直接在指令列模式上进行 sed 的动作编辑
        -f∶指定sed脚本的文件名. 直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作
        -r∶sed 的动作支援的是延伸型正则表达式的语法。(预设是基础正则表达式语法)
        -i∶直接修改读取的文件内容,而不是由屏幕输出
      

常用命令 ;

        a ∶ 新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
        c ∶ 取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
        d ∶ 删除,因为是删除,所以 d 后面通常不接任何内容
         i ∶ 插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
         p∶ 列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起用
         s∶ 取代,可以直接进行替换的工作。通常这个 s 的动作可以搭配正则表达式。例如 1,20s/old/new/g


二.实例分享;

1.清除该文件内所有空白行;(文件内容如下所示;)

 LINUX 三剑客老二(Sed) 日常工作总结 _工作总结


[root@xin test]# sed -i '/^$/d' test1.txt  #清除文件内所有空行;


 LINUX 三剑客老二(Sed) 日常工作总结 _工作总结_02


2.替换文件内所有阿拉伯数字为test;


 LINUX 三剑客老二(Sed) 日常工作总结 _工作总结_03


[root@xin test]# sed -i 's/[0-9]/test/g' test1.txt #替换文件内所有阿拉伯数字为test;


 LINUX 三剑客老二(Sed) 日常工作总结 _sed_04



3.将文件内所有小写字母替换成123;


 LINUX 三剑客老二(Sed) 日常工作总结 _工作总结_05


[root@xin test]# sed -i 's/[a-z]/123/g' test1.txt #所有小写字母替换成123;


 LINUX 三剑客老二(Sed) 日常工作总结 _工作总结_06