5, sed

1,122 views

Published on

About linux sed tool

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,122
On SlideShare
0
From Embeds
0
Number of Embeds
16
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

5, sed

  1. 1. sed
  2. 2. Agenda
  3. 3. 概述• sed被称为流编辑器(stream editor), 它提供了一 种非交互式的方式(仅使用命令行)对输入的文 本内容进行编辑, 并将编辑后的文本输出到标 准输出. sed的输入可以来自: 文本文件, 管道或 者标准输入;• sed不会修改输入文件的内容, 除非将输出结果 重定向到该文件; sed是基于正则表达式执行各 种文本操作命令的;• 使用sed --version命令查看当前使用sed工具的 版本.
  4. 4. 工作过程• sed是逐行对输入进行处理的, 以sed处理文本文件为 例, 以下是一个处理周期: 1, 读取文件的一行, 并保存在一个称为模式空间的内 存缓冲区中; 2, 如果指定了行范围, 则判断该行是否在该范围中. 如果在则执行sed命令, 不在则不执行sed命令; 3, 如果未指定行范围, 执行sed命令; 4, 如果未指定-n选项且模式空间没有清空, 打印模式 空间中的文本(可能经过处理也可能未处理). 注: 可以使用d指令清空模式空间. sed在处理完所有的输入行之后, 退出程序. 可以看到 在整个处理过程中sed不会对文本文件进行写操 作, 而只是输出到标准输出.
  5. 5. 工作过程 - 示例• 这里以一个示例文件和相关的命令演示sed的工作过程. textfile文件的 内容是以下三行: abc ddd abc 命令: sed -n 1,2s/a/b/p textfile 命令说明: -n 默认不打印模式空间 1,2 行范围, 处理1-2行 s/a/b/p sed命令, 替换模式a为b, 然后打印• 执行过程:1, 读取第一行abc, 该行在范围1,2中, 执行命令s/a/b/p, 将替换后的字符串 bbc打印出来; 指定了-n选项不再打印;2, 清空模式空间, 读取第二行ddd, 该行在范围1,2中, 执行命令, 没有发生 替换操作, 不打印; 指定-n选项, 不再打印;3, 清空模式空间, 读取第三行abc, 不在范围1,2中, 不执行sed命令; 指定了 -n选项不打印. 命令最终的输出结果是: bbc
  6. 6. 基本用法• 举几个简单的例子, 以便对sed这个工具有一些 初步的了解: sed -n ‘/RE/p’ file # 打印匹配RE的行; sed在 处理完一行之后默认会打印该行, -n选项表示 不打印; 跟在/后面的p是sed指令, 表示打印. sed -n ‘s/RE/string/p’ file # 对文件中包含RE的行 进行替换, 替换后打印该行; 没有进行替换的行 不打印.
  7. 7. sed命令• sed支持对当前行的如下编辑命令(常用): a 在当前行后面添加一行或多行 i 在当前行之前插入文本 c 用新文本修改(替换)当前行 d 删除行 p 打印行 n 读取下一行, 并从下一条命令开始处理该行 q 退出sed r 从文件中读取输入行 ! 对当前行之外的所有行执行命令 -----------------与暂存缓冲区相关----------------- h 将模式空间内容复制到暂存缓冲区 H 将模式空间内容追加到暂存缓冲区 g 将暂存缓冲区内容复制到模式空间 G 将暂存缓冲区内容追加到模式空间 x 交换暂存缓冲区与模式空间内容 s 执行替换操作与替换命令配合使用: g 行内进行全局替换 p 打印行, 与s配合使用时仅在发生替换时才打印 w 将行写入文件
  8. 8. sed命令 -!• 可以在命令前面加上”!”表示不执行该命令, 比如: !d 不删除模式空间 !p 不打印 示例: sed -n ‘/ab/!p’ textfile # 打印所有不匹配 模式的行 sed ‘/ab/!d’ textfile # 删除不匹配模式的行
  9. 9. sed选项• sed命令可以指定如下选项: -e 允许多项编辑 -f 指定sed脚本文件名称 -n 取消默认的输出 示例1: sed -e 1,2d -e s/ab/d/ textfile 说明: 这里使用了-e选项进行多项编辑, 对读取的每一行, 先执 行命令‘1,2d’, 然后执行命令’s/ab/d/’. 示例2: sed -n ‘/ab/p’ textfile 说明: 打印包含模式ab的行, 其他行不打印
  10. 10. 退出状态• sed在执行完成时会设置一个退出状态, 如果 程序执行成功状态为0, 否则为非0. 示例:• 与grep不同的是sed只有在程序执行出现错 误时才会将退出状态置为非0, 示例:
  11. 11. 范围界定• 范围界定是指界定需要进行编辑行的范 围, 可以是数字/正则表达式, 或者两者的组 合. 如果使用数字指定行号, 行号从1开始, $ 符号表示最后一行. 如果没有指定范围, 那 么sed将会默认处理所有的行. 示例: sed ‘1,3d’ textfile # 删除1-3行 sed -n ‘/west/,/north/p’ textfile # 打印从匹配 west开始到匹配north的行
  12. 12. sed元字符• sed的正则表达式元字符与vi的十分类似, 不 同的地方是sed在进行替换时使用&字符代 表查找到的结果以便在替换串中引用, 示例: sed -n s/[a-z]+/&~/gp textfile 说明: 在所有连续的小写字符串后面加上~符号.• sed其他的元字符参考: 《3, Regular Expression.pptx》
  13. 13. 正斜杠/• 默认情况下sed使用正斜杠进行模式的匹配和 替换, 如果需要在模式中使用/字符, 那么需要 使用进行转义, 比如: sed -n ‘/ab//p’ textfile # 打印匹配ab/模式的行 另一个解决方法是使用另外的字符作为模式标 识符, 使用char指定某个字符作为模式标识 符, 比如: sed -n ‘#ab/#p’ textfile # 使用#代替/• sed替换命令默认以s命令后的第一个字符作为 模式标识符, 此时不需要, 比如: sed -n ‘s#ab#88#p’ textfile # 使用#代替/
  14. 14. 示例• 以下是一些示例, 用于演示一些具体命令的使用: 1, p p命令用于打印模式空间的内容, 通常与-n选项一起使用打印匹 配特定模式的行. 示例: sed -n ‘/north/p’ textfile # 打印匹配north模式的行 2, d d命令用于删除当前模式空间的内容, 这些行的内容不会被打印. 示例: sed ‘1,3d’ textfile # 删除1-3行 sed ‘3,$d’ textfile # 删除3到最后一行 3, s s命令用于替换操作, 示例: sed ‘s/ab/c/’ textfile # 将第一个ab替换为c sed ‘s/ab/c/g’ textfile # g表示将所有的ab替换为c s命令与p命令, -n选项配合使用, 仅打印发生替换后的行, 示例: sed -n ‘s/ab/c/gp’ textfile # 对包含ab模式的行进行替换并打印
  15. 15. 示例4, 行范围sed -n ‘2,3p’ textfile # 打印2-3行sed -n ‘/west/,$p’ textfile # 打印匹配west行到最后一行sed -n ‘5,/^north/p’ textfile # 打印第5行到匹配以north开头的行5, r在处理完当前行之后(包括默认的打印), 打印文件内容.示例:sed ‘/ddd/r t2’ textfile # 打印匹配ddd的行之后, 输出t2文件的内容6, w将当前文件的一些行写入到另一个文件, 示例:sed -n ‘/ab/w newfile’ textfile # 将匹配ab的行写入newfile中
  16. 16. 示例7, a追加, 在处理完当前行之后追加内容到标准输出, 示例:sed ‘/ddd/a hello’ textfile # 处理完包含ddd模式的行之后, 输出 hello8, i插入, 在处理当前行之前打印内容到标准输出, 示例: sed ‘/ddd/i hello’ textfile # 处理包含ddd模式的行之前, 输出 hello9, c用指定的文本替换模式空间的文本, 并打印输出, 之后处理下一行. 示例: sed ‘/ddd/c hello’ textfile # 替换匹配模式的行
  17. 17. 示例10, n读取下一行, 之后的命令都会作用在下一行上面. 示例: sed /abc/{n;s/dd/gg/g} textfile说明:如果读入的行不匹配模式abc, 不执行命令默认打印该行;如果匹配, 打印该行之后读取下一行, 对下一行执行命令s/dd/gg/g, 之后默认打印修改后的内容11, y转换命令, 比如y/abc/ABC/将abc分别转换为大写, 示例:sed ‘1,3y/abc/ABC/’ textfile # 将1-3行的abc分别转换为ABC12, q处理完指定行之后, 退出sed. 示例: sed ‘/ddd/q’ textfile # 处理完匹配ddd的行之后退出命令
  18. 18. 暂存缓冲区• 暂存缓冲区是模式空间之外的另一个缓冲区, sed提供了 相关的命令用于将模式空间的内容存储到暂存缓冲区 中: h 将模式空间内容复制到暂存缓冲区 H 将模式空间内容追加到暂存缓冲区 g 将暂存缓冲区内容复制到模式空间 G 将暂存缓冲区内容追加到模式空间 x 交换暂存缓冲区与模式空间内容• 示例: sed -e /abc/H -e $G textfile 读取一行, 如果匹配abc模式追加到暂存区, 如果当前是 最后一行则将暂存区的内容追加到模式空间; 最后打印 模式空间的内容. sed -e /abc/H -e $x textfile 与上例不同的是, 如果是最后一行交换暂存区与模式空
  19. 19. END

×