• linux sed命令使用说明


    目录

    命令选项OPTION

    sed中的指令

    追加(Append)指令:a 

    插入指令(Insert):i

    替换行指令(Replace) :c

    替换指令:s/regexp/replacement/

     删除指令(Delete):d

    打印指令(Print)

    显示行号指令:=

    读取指令(Read)

    写入指令(Write)

    sed匹配正则表达式的”元字符集“


    sed是一种流编辑器,用于对输入流(文件或来自管道的输入)执行基本的文本转换。虽然在某些方面类似于允许脚本编辑(如ed)的编辑器,sed的工作方式是只对输入进行一次传递,因此效率更高。sed在管道中过滤文本的能力是它与其他类型编辑器的特别之处。

    命令选项OPTION

    OPTION:
    -e 告诉sed将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时才需要使用-e选项
    -i 直接对内容进行修改,不加-i时默认只是预览,不会对文件做实际修改
    -n 取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行
    -f 后跟保存了sed脚本文件

    sed中的指令

    追加(Append)指令:a 

    向匹配行**后**面插入内容

    1. # 每行后面都追加hello
    2. sed 'ahello' example
    3. # 指定行后面追加hello
    4. sed '2ahello' example
    5. # 1-3行后面追加hello
    6. sed '1,3ahello' example
    7. # 从第1行开始,每隔2行追加hello
    8. sed '1~2ahello' example
    9. # 反向(上面匹配行之外的行)
    10. sed '1~2!ahello' example
    11. # 除了1-2行之外的行追加hello
    12. sed '1,2!ahello' example
    13. # 匹配行后面追加hello
    14. sed '/131/ahello' example
    15. # 匹配行取反
    16. sed '/131/!ahello' example
    17. # 最后行追加hello
    18. sed '$ahello' example

    插入指令(Insert):i

    向匹配行**前**面插入内容(插入的位置和a分别为一前一后)

    替换行指令(Replace) :c

    可以理解为替换,也可以理解为change(修改);使用过sed命令的同学可能会有疑问sed的替换不是s吗?s替换的是关键字、也可以是行,但是c只能替换行。

    1. # 每一行都替换为hello
    2. sed 'chello' example
    3. # 指定行替换为hello
    4. sed '2chello' example
    5. # 1-3行整体替换为一行hello
    6. sed '1,3chello' example
    7. # 从第1行开始(含),每隔1行替换为hello
    8. sed '1~2chello' example
    9. # 反向(上面匹配行之外的行)
    10. sed '1~2!chello' example
    11. # 除了1-2行之外的每一行替换为hello
    12. sed '1,2!chello' example
    13. # 匹配行后面追加hello
    14. sed '/131/chello' example
    15. # 匹配行取反
    16. sed '/131/!chello' example
    17. # 最后行追加hello
    18. sed '$chello' example

    替换指令:s/regexp/replacement/

    尝试将regexp与数据流匹配。如果成功,将匹配的部分替换为replacement。替换可以包含特殊字符&,用于指向匹配的模式空间的哪一部分,而特殊转义\1到\9用于指向regexp中相应的匹配子表达式。

    1. # 默认只替换每行的第一个匹配
    2. sed 's/aaa/131/' example
    3. # 替换每行所有的匹配
    4. sed 's/aaa/131/g' example
    5. # 替换每行第二个匹配
    6. sed 's/aaa/131/2' example
    7. # 每行匹配到的第二个aaa,替换为1234,然后将变更行写入(覆盖)到test1文件
    8. # 也就是说test1里的内容跟sed -n的回显一致(下面的命令-n并不必要,且在s///中-n只有在如下场景下才有效)
    9. sed -n 's/aaa/1234/2pw test1' example
    10. # 匹配有‘#’号的行,替换每行第二个aaa为1234
    11. sed '/#/s/aaa/1234/2' example
    12. # 每行最后3个字符替换为END
    13. sed 's/...$/END/g' example
    14. sed 's/.\{3\}$/END/g' example
    15. # 将每行的第一个数字前后加小括号
    16. sed 's/^\s*//;s/[0-9]/(&)/' example

    通过s///g替换的方式删除行,会留下空行而//d不会
    但是,d只支持//一种正则匹配结构,而s可以使用s|||等任意特殊字符。

    1. sed '/^\s*#.*/d' example
    2. 等同于:
    3. sed 's/^\s*#.*//g;/^$/d' example

     删除指令(Delete):d

    1. # 删除所有行
    2. sed -n 'd' example
    3. # 删除指定行
    4. sed '2d' example
    5. # 删除1-3行
    6. sed '1,3d' example
    7. # 删除1-5行中匹配到131的行
    8. sed '1,5{/131/d}' example
    9. # 从第1行开始(含),每隔1行删除1行
    10. sed '1~2d' example
    11. # 反向(上面匹配行之外的行)
    12. sed '1~2!d' example
    13. # 除了1-2行之外的每一行替换为hello
    14. sed '1,2!d' example
    15. # 匹配行后面追加hello
    16. sed '/131/d' example
    17. # 删除空行
    18. sed '/^$/d' example
    19. # 删除匹配行以及下一行(如果匹配行不止一行,还挨着,就不会删除最后一行匹配行的下一行)
    20. sed '/131/,+1d' example
    21. # 删除匹配行到最后一行
    22. sed '/131/,$d' example
    23. # 匹配行取反删除
    24. sed '/131/!d' example
    25. # 最后行追加hello
    26. sed '$d' example

    打印指令(Print)

    p 必须和-n选项配合,否则会打印所有行。

    1. #打印文件中的第4行内容
    2. sed -n '4p' example
    3. #从第二行开始,每隔两行打印一行,波浪号后面的2表示步长(打印偶数行)
    4. sed -n '2~2p' example
    5. #打印文件的最后一行
    6. sed -n '$p' example
    7. #打印1到3行
    8. sed -n '1,3p' example
    9. #打印从第3行到最后一行的内容
    10. sed -n '3,$p' example
    11. #逐行读取文件,打印匹配aaa的行
    12. sed -n '/aaa/p' example
    13. #逐行读取文件,打印从匹配china的行到第4(匹配到的第一行开始算)行的内容
    14. sed -n '/aaa/,4p' example
    15. #打印第一行到匹配aaa(除第一行外第一个匹配行)的行
    16. sed -n '1,/aaa/p' example
    17. #打印从匹配aaa的行及其向后一行(如果匹配的aaa行连续,则以最后一个匹配行为准)
    18. sed -n '/aaa/,+1p' example
    19. #打印从匹配内容aaa到匹配内容134的行,如果/134/没有匹配到内容,则打印从aaa到最后一行
    20. sed -n '/aaa/,/134/p' example

    显示行号指令:=

    1. # 打印最后一行行号
    2. sed -n "$=" example
    3. # 打印匹配行行号(多行匹配,则打印多行行号)
    4. sed -n "/aaa/=" example
    5. # 打印行号及其内容
    6. sed -n "/aaa/{=;p}" example

    读取指令(Read)

    r 要配合-i选项才会写入文件

    1. # 将文件1 读取到文件2
    2. sed 'r 1' 2
    3. 等同于
    4. sed '$r 1' 2
    5. 等同于
    6. cat 1 >>2
    7. # 在文件2的第3行后插入文件1的内容
    8. sed '3r 1' 2
    9. # 在文件2匹配的行后插入文件1的内容(如果匹配多行,则在多个匹配行之后插入文件1的内容)
    10. sed '/file1/r 1' 2

    写入指令(Write)

    w 配合-n参数无输出,所以不能带-n。

    1. # 将文件2的内容写入文件3,如果3不存在则创建;如果存在则覆盖原有内容
    2. sed 'w 3' 2
    3. # 将文件1的第一行和最后一行写入文件3
    4. sed -e '1w 3' -e '$w 3' 1
    5. # 将文件1的第一行和最后一行分别写入文件2、3
    6. sed -e '1w 2' -e '$w 3' 1
    7. # 将文件1中匹配到的aaa和aa行写入文件3
    8. sed -n '/aaa\|aa/w 3' 1
    9. # 将文件1中,匹配行到最后一行都写入到文件3(这里的匹配行是从第一个匹配行开始)
    10. sed -n '/aaa/,$w 3' 1
    11. # 将文件1中,匹配行及其后2行写入到文件3(这里的匹配行是从最后一个匹配行开始)
    12. # 如果匹配行后面没有那么多,直接到最后一行
    13. sed -n '/file/,+2w 3' 1

    sed匹配正则表达式的”元字符集“

    1. # ^锚定行的开始如
    2. /^sed/匹配所有以sed开头的行。
    3. # $锚定行的结束
    4. /sed$/匹配所有以sed结尾的行。
    5. # .匹配一个非换行符的字符
    6. /s.d/匹配s后接一个任意字符,然后是d。
    7. # *匹配零或多个字符
    8. /*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
    9. # []匹配一个指定范围内的字符
    10. /[Ss]ed/匹配sed和Sed。
    11. # [^]匹配一个不在指定范围内的字符
    12. /[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
    13. # \(..\)保存匹配的字符
    14. s/\(love\)able/\1rs,loveable被替换成lovers。
    15. # &;保存搜索字符用来替换其他字符
    16. s/love/**&**/,love这成**love**。
    17. # \<;锚定单词的开始
    18. /\
    19. # \>;锚定单词的结束
    20. /love\>/匹配包含以love结尾的单词的行。
    21. # x\{m\}重复字符x,m次
    22. /0\{5\}/匹配包含5个o的行。
    23. # x\{m,\}重复字符x,至少m次
    24. /o\{5,\}/匹配至少有5个o的行。
    25. # x\{m,n\}重复字符x,m-n次
    26. /o\{5,10\}/匹配5--10个o的行。

  • 相关阅读:
    pdf structuredClone is not defined 解决
    ubuntu20环境搭建+Qt6安装
    面向未来的服务网格发展:展望服务网格技术未来的发展方向和趋势
    android app渗透测试-Activity、Service
    [附源码]SSM计算机毕业设计置地房屋租赁信息系统JAVA
    Linux rpm方式安装 MYSQL8.0
    智康护智慧养老——物联系统解决方案
    答辩步骤及相关准备1
    Spring中的设计模式
    Clion 搭建Qt projects
  • 原文地址:https://blog.csdn.net/avatar_2009/article/details/126782902