sed

作者: 忧忧草_a195 | 来源:发表于2019-01-16 10:47 被阅读24次

    sed是一个“非交互式的”面向字符流的编辑器,默认情况下是不会修改原文件的。

    工作原理:

    一行一行处理的。

    当从文件中读取一行后,首先放到模式空间中对该行进行相应的处理,处理完将结果输出到屏幕上。然后继续读取下一行内容,直到所有行都读取完毕,sed结束。

    语法:

    sed [选项] '模式动作' 文件...

    选项:

    -n:       静默输出,关闭模式空间的输出,不会输出未匹配到的行 一般与p命令结合使用

    -e:      允许进行多项编辑,也就是说对同一行做多次处理、. 可以做多点编辑

    -e:      '动作1'  -e '动作2'  ==  '动作1;动作2'

    -f:        后接sed脚本,指定执行的sed脚本(将模式动作写到文件中)

    -r:       允许使用扩展正则

    -i:       直接作用于原文件

    -i.bak:  修改原文件之前进行备份

    模式:

    1. 空模式

    表示所有的行都执行动作

    2. 以行号作为模式

    1). 单独的行号,如:1  就是处理第1行;$  处理最后一行

    2). 起始行,结束行, 如:1,5    处理第1到5行

    3). 起始行~步长

    每隔多少行操作一次, 如:2~2 从第2行开始,每隔1行

    4). 起始位置,+N

    表示从起始位置开始,后面的N行都进行处理, 如:3,+5  处理3-8行

    3. 以正则作为模式

    1). /正则表达式/, 如:/^root/

    2). /正则表达式1/,/正则表达式2/

    表示从第一次匹配到正则表达式1开始到第一次匹配到正则表达式2之间的所有行, 如:/^bin/,/sh$/

    动作-----处理命令:! 非: 放在命令前面表示取反

    1. d    删除 delete

    2. p    打印      print

    3. r     读取      read

    4. w    写          write

    5. a    追加  在匹配的行下面插入内容            append

    6. i      插入  在匹配行的上一行插入内容        insert

    7. c    修改    本行替换                                  change

    8. y    转换的命令,一一对应转换

    9. n    处理下一行                                          next

    10. q    退出,不会再向模式空间读入新的行      quit

    11. s    查找替换       '模式s/旧的内容(正则表达式)/替换内容(新的内容)/[修饰符]'

           修饰符:

              g:全局替换

              n:n为数字,1-512    替换第n个匹配到的内容

              p:打印      -n

              w:把处理过的行写入到另一个文件


    \u upper 大写字母

    \l    lower    小写字母

    将文件中所有小写字母替换成大写字母:

    # sed  's/[a-z]/\u&/g'  /tmp/pass



    模式空间:

    用于处理文本行,最大保存8192字节

    保留空间:

    用于保留文本行,用来保存已经处理完的文本行,最大保存8192字节,默认有一个空行

    置换命令:

    h:将模式空间的内容复制到保留空间 —— 覆盖模式

    H:将模式空间的内容追加到保留空间 —— 追加模式

    g:将保留空间的内容复制到模式空间 —— 覆盖模式

    G:将保留空间的内容追加到模式空间 —— 追加模式

    x:将模式空间和保留空间中的内容进行交换 

    控制流:

    !    命令取反 例: 1!d 删除第一行以外的行

    {}   命令组合 命令用分号分隔 {1h;G} 可以理解为 -e 参数的另一种写法

    =   打印行号(输入行的号码,而非处理的次数行号) 例如: sed -n '2{=;p}' infile

    n   读入下一行到模式空间 例:'4{n;d}' 删除第5行

    N   追加下一行到模式空间.

    P   输出多行模式空间的第一部分,直到第一个嵌入的换行符为止。在执行完脚本的最后一个命令之后,模式空间的内容自动输出。P命令经常出现在N命令之后和D命令之前。

    D   删除模式空间中直到第一个换行符的内容。它不会导致读入新的输入行,相反,它返回到脚本的顶端,将这些指令应用与模式空间剩余的内容。

    这三个命令能建立一个输入. 输出循环,用来维护两行模式空间,但是一次只输出一行。

    这个循环的目的是只输出模式空间的第一行,然后返回到脚本的顶端将所有的命令应用于模式空间的第二行。没有这个循环,当执行脚本中的最后一个命令时,模式空间中的这两行都将被输出。Sq

    相关文章

      网友评论

        本文标题:sed

        本文链接:https://www.haomeiwen.com/subject/hqipdqtx.html