强大的编辑查找命令---sed


sed(stream editor流编辑器)

        sed是一种几乎包括全部 UNIX平台的轻量级编辑器。sed主要是用来将数据进行选取。替换。删除。功能很强大。来看看介绍:        正则表达式

        sed是逐行(行编辑器,记住,一行读取一次,对行编辑。必定要记住这个概念!)读取至内存,这个内存空间也叫模式空间,在模式空间中处理后将模式空间打印至屏幕。可是默认不对原文件处理。在模式空间中能够进行进行模式匹配和编辑操做。模式空间中的内容可再次放入保持空间,进行编辑。express

        须要注意的是sed命令中有没有匹配到默认都会打印至屏幕,除非对其编辑。编辑后根据编辑命令也会打印到屏幕上,或者静禁止输出。 vim

        vim只能修改文档,sed能够从管道里接受任何数据进行编辑。编辑器



sed    [OPTION]...  'script'  [input-file] ...  [选项]  '[编辑命令]' 文件名ide

选项:spa

   -n 禁止默认显示行为,只保留编辑后的行为,在不使用d命令的状况下通常都要使用。不输出模式空间中的内容至屏幕;code

   -e   script --expression=script:容许对输出数据应用多条sed命令编辑。若是写下一行用\分割下一行也-e,若是写在一行上直接-e编辑。regexp

   -i  sed的修改结果直接修改读取数据的文件。而不是由屏幕输出。(输出数据和文件数据都改)orm

   -r  --regexp-extended 表示使用扩展正则表达式。ip

   -f PATH/TO/SED_SCRIPT_FILE    经过读取脚本,每行执行一个sed编辑命令,;

script:  '/地址定界或PATTERN/编辑命令'

地址定界:

   (1) 空地址:对全文进行处理;

   (2) 单地址:

           #:指定行;

           /pattern/:被此模式所匹配到的每一行;    

   (3) 地址范围

       #,#:

       #,+#:

       #,/pat1/

       /pat1/,/pat2/   //从第一次被匹配到的行开始第二次匹配到的行结束。

       $:最后一行;

   (4) 步进:~

       1~2:全部奇数行; 2~2:全部偶数行;

编辑命令:  

    a \string  在文本后追加string\n 可用于换行,实现多行追加;

    c \string  行替换 ,把匹配到的行替换为此处指定的string,换行每行后加“\n”;

    i \string   在行前插入。一行或多行,除最后与一行,每行后加  \n

    d   删除模式空间中内容。整行删除。

    p 打印,显示模式空间中的内容,输出指定行。

    w  /PATH/TO/SOMEFILE: 保存模式空间匹配到的行到指定文件。

    r   /PATH/TO/FILE 将指定的文件的内容内的添加至模式匹配的行后面,文件合并。

    =:为模式匹配到的行打印行号;

    !:条件取反:地址定界!编辑命令;

    s /pattern/string/字符串查找替换,分隔符不用要操做的分隔符,其余符号看成分隔符也行,格式为“几行s/旧字符串/新字符串/g

   替换标记:

       g:全局替换;

       i: 忽略字符大小写;

       w:/PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中;

       p 显示替换成功的行;

高级编辑命令:

   h:把模式空间中的内容覆盖至保持空间中;

   H:把模式空间中的内容追加至保持空间中;

   g:把保持空间中的内容覆盖至模式空间中;

   G:把保持空间中的内容追加至模式空间中;

   x:把模式空间中的内容与保持空间中的内容互换;

   n:覆盖读取匹配到的行的下一行至模式空间中;

   N:追加读取匹配到的行的下一行至模式空间中;

   d  :删除模式空间中的行;

   D:删除多行模式空间中的全部行;





举例:

sed  '2a  \hello'  student.txt  //在第二行以后追加hello
sed '2i  hello \  world' student.txt  //在第二行以前插2行数据 hello(第一行) world(第二行)  
sed  '4s/99/55/g’ student.txt     //把4行的99换成55
sed  '/oot/d'  /etc/fstab  //删除oot在/etc/fstab
sed  '/^\//p'  /etc/fstab  显示/开始的行 
sed  '/^\//a \abc'     /etc/fstab  /开头的行后追加abc
sed '/oot/w  /tmp/oot.txt'  /etc/fstab     有oot的一行保存至/tmp/oot.txt目录下,处理文件/etc/fatab
sed  's#l\(..e\)#L\1#g' sed.txt  把l...e中的l换为大写。
sed -n 'n;p' /etc/fstab   显示偶数行,;
sed  '1!G;h;$!d'  FILE    逆序显示文件内容
sed ‘!d’FILE  显示最后一行
sed ‘$!N;$!d’FILE  最后两行
sed ‘/^$/d;G’  删除原有的全部空白行,然后为全部空白行后添加一个空白行;
sed ‘n;d’FILE; 显示奇数行,按行读取的。
sed ‘G’FILE  在原有行后添加空白行;
echo“/etc/fstab”|sed '@[^/]\+/\?$@@'  取出基名
相关文章
相关标签/搜索