• Learn sed using these command on Linux(流线式编辑器——sed)


    是对文件中的每一行进行处理,不会对源文件进行修改

    sed --version

    sed '11d' sed_file

    sed -n '/[Bb]erry/p' sed_file (由于设置了n,所以只打印出有Berry/berry的行)

    sed  '/[Bb]erry/p' sed_file(没有设置n,则会输出所有的行,同时有Berry/berry的行会输出两次)

    sed 's/berry/bbery/' sed_file

    sed '/^berry/p' sed_file (打印所有以berry开头的那一行)

    sed '/[^b]erry/p' sed_file (打印出所有不包含以b开头,并且紧跟着erry的行,这种匹配是根据一个单词来说德)sed -n '/.erry/p/' sed_file (.代表是任意非换行的字符)

    x{m} 重复字符X,M次
    x{m,} 重复字符X,至少M次
    x{m,n}a 重复字符X,至少M次,不多于N 次
    sed '/r{2}/p sed_file (匹配2个r,至少有2个r 或 2~10个r 的行)

    sed '3,$d' sed_file (删除第3行到最后一行,其他的行被打印)

    (..) 保存匹配的字符         s/(love)able/1rs/        标签标记出来的部分被保存在1号标签中,为了方便在后面引用,使用|来表
                              示,|将被标签标记出来的模板替换,从表达式的最左边开始,向右最多可以使用9个标签。
                              例如,love被保存在寄存器1当中,并稍后用做字符串替换。loveable就被替换为lovers 3

    #sed -n 's/(Mar)got/1ianne/p' datafile
    north NO Marianne Weber 4.5 .89 5 9
    说明:

      模板Mar 被包含在一对括号内,并在特殊的寄存器中保存为标签1(tag1),它将在后面作为1
    替换字符串。Margot替换所有的Marianne。

    #sed -n 's/(berry)/1able/gp' sed_file   (同理,所有的berry都将被berryable所替换,并打印出这些被处理的行)

    #sed 's/berry/&able/gp' sed_file (结果与上相同)

    sed 's#3#88#g' datafile (#相当于/,作为搜索字符串和替换字符串的分隔符,默认分隔符是/,但是在s 命令使用
                  的情况下可以改变。不论什么字符紧跟着s 命令都被认为是新的分隔符。这个技术在搜索包含斜杠
                  的模板时非常有用,例如搜索时间和路径的时候。)

    sed -n'/west/,/east/p' datafile(所有在模板west 和east所确定的范围内的行都被打印。如果west出现在east后面的行中,从west
    开始到下一个east,无论这个east出现在那里,二者之间的行都将被打印,即使从west开始到了文件的末尾如果还没有出现east,

    那么从west 到末尾的所有的行都将打印。箭头所表示的就是被打印的范围。)

    sed '/west/,/east/s/$/**VACA**/' datafile (对于模板east 和west 之间的行,每行的末尾用字符串**VACA**替换,下一行都被移动到该字
    符串的后面)

    多点编辑:e 命令

    sed -e '1,3d' -e 's/Berry/berry/p' sed_file(先删除,后进行字符串替换)

    因为两个命令是在同一行执行(也就是说,两个命令都是在当前行的固定空间中执行),所以命令的执行顺序将影响命令的结果。

    sed -–expression='s/TB/Tobias/' -–expression='/north/d' datafile

    从文件读入:r命令

    sed '/Suan/r newfile' datafile

    命令 r 表示从文件中读取指定的行。newfile 文件的内容被读入输入文件datafile 中,显示在与
    suzan相匹配的行的后面。如果suzan在不止一行中出现,newfile的内容就将显示在所有匹配行的下
    面。

    写入文件:w命令

    sed –n '/north/w newfile2' datafile

    命令w表示把一个指定的行写入文件。所有包含north的行都将被写入名为newfile2的文件中。

    追加:a 命令(a)

    sed '/^north /a\
    --->THE NORTH SALES DISTRICT HAS MOVED<---' datafile

    命令a表示追加。字符串--->THE NORTH SALES DISTRICT HAS MOVED <---将被追加到以
    north开头,且north后面有空格的行的后面。需要被追加的文本必须写在命令行中追加命令的后面。
    sed要求在命令a后面有一个反斜杠。第二个反斜杠表示在TC Shell下转义换行符,这样才能在
    下一行完成引用。a如果被追加的不止一行,除了最后一行,每一行也都要用反斜杠结束。

    插入:i命令

    sed '/eastern/i\
    NEW ENGLAND REGION
    --------------------------------' datafile

    命令 i 是插入命令。如果模板eastern 被匹配,i 命令就把反斜杠后面的文本插入到包含eastern
    的行的前面。除了最后一行,每一行插入完成后都需要反斜杠(额外的反斜杠是用来满足TC Shell
    的要求的)。

    下一个:n命令

    sed '/eastern /{ n; s/AM/Archie/; }' datafile

    如果模板eastern 匹配了某一行,n 命令就移动到输入文件中该行的下一行,替换这一行的模式
    空间。即用Archie替换AM,打印该行,然后再继续。

    变形:y命令

    sed '1,3y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKL
    MNOPQRSTUVWXYZ/' datafile

    对于1~3行,y命令把所有的小写字符转变为大写字符。正则表达式元字符不能使用这个命令。

    退出:q命令

    sed ‘5q' sed_file

    sed '/Lewis/{ s/Lewis/Joseph/;q; }' datafile(在Lewis匹配的行,先用Joseph替换Lewis,然后退出sed程序)

    保持和获取:h命令和g命令

    sed -e '/northeast/h' -e '$G' datafile (如果有多行northeast匹配,那么只会把最近的保存进保持缓冲区的字符串追加到模式空间中)

    在sed处理的文件的时候,每一行都被保存在一个叫作模式空间(pattern space)的临时缓冲区
    中。除非行被删除或者输出被取消,否则所有被处理过的行都将打印在屏幕上。接着模式空间被清
    空,并存入新的一行等待处理。在这个例子中,包含模板的northeast 行被找到,并被放入模式空间
    中,h命令将其复制并存入一个称为保持缓冲区(holding buffer)的特殊缓冲区内。在第二个sed 结
    构中,当达到最后一行后,G命令告诉sed 从保持缓冲区中取得该行,然后把它放回到模式空间中,
    且追加到现在已经存在于模式空间中的行的末尾——在这个例子中,就是追加到最后一行。简单来
    讲:任何包含模板northeast 的行都将被复制并追加到该文件的末尾。

    sed -e '/northeast/h' -e '$g' datafile (g和G的区别,g 会替换掉最后一行,而G是追加到其后面)

    h命令和x命令

    sed –e '/patricia/h' -e '/Margot/x' datafile

    命令x表示互换模式空间和保持缓冲区的内容。当模板patricia被匹配,该行将被保存到保持缓
    冲区中。当包含Margot 的行被找到,模式空间将与保持缓冲区交换彼此的行。简单地说,就是包含
    Margot的行被包含patricia的行替换了。

    -f sed 脚本

    sed -f scrript_file sed_file

    sed –n 'l' sed_file 打印所有包含不能打印字符的行

  • 相关阅读:
    155. 最小栈
    160. 相交链表
    PAT 1057 Stack
    PAT 1026 Table Tennis
    PAT 1017 Queueing at Bank
    PAT 1014 Waiting in Line
    PAT 1029 Median
    PAT 1016 Phone Bills
    PAT 1010 Radix
    PAT 1122 Hamiltonian Cycle
  • 原文地址:https://www.cnblogs.com/Berryxiong/p/5638325.html
Copyright © 2020-2023  润新知