Presentation is loading. Please wait.

Presentation is loading. Please wait.

第二章 流编辑器sed 一. 什么是流编辑器? 流编辑器是一种流水线型的、非交互式

Similar presentations


Presentation on theme: "第二章 流编辑器sed 一. 什么是流编辑器? 流编辑器是一种流水线型的、非交互式"— Presentation transcript:

1 第二章 流编辑器sed 一. 什么是流编辑器? 流编辑器是一种流水线型的、非交互式
的文本编辑器。 它使用户可以在命令行上(而不是编辑器中)对文件进行无破坏 性编辑。

2 屏幕编辑器与流编辑器的区别 vi sed 1.用户操作方式 2.文本处理模式 3.编辑命令地点 4.编辑空间 5.对原文本影响
6.批量发出命令 7.基本编辑单位 8.主要应用场合 9.可编文件大小 交互式 全局并行(可逆行) 编辑器中 临时文件(文件缓存) 破坏性的 不能 字符 人工编辑 较小 非交互式 逐行串行(不可逆行) 命令行上 模式空间(行缓存) 非破坏性的 可以 程序自动编辑 较大

3 二. sed 命令基本格式 sed ‘command’ file sed -n ‘command’ file
sed -e ‘command1’ –e ‘command2’ file sed -f cmd_file file 任选项说明: command: 行编命令 -n: 只显示与模式匹配的行(缺省都显示) -e: 在命令行上进行多次编辑 -f: 编辑命令放在随后的命令表文件中

4 注意: sed命令的结果是送到标准输出上,即 荧光屏上,如果要将结果保存在文件中, 应该使用重定向功能! 例如:
sed ‘s/student/teacher/g’ oldfile > newfile 如果要把结果保留在原文件中,该如何办?

5 三. 行编辑命令的基本格式 [行定位符][编辑命令元字符] 例如: sed ‘1,9d’ abc sed -n ‘196p’ abc
/正则表达式/[编辑命令元字符] 例如: sed -n ‘/student/p’ filename sed ‘/xyz/d’ filename 3. [定位符][元字符]/正则表达式/[元字符] 例如: sed –n ‘3,8s/east/west/’ filename sed –n ‘1,$s/computer/network/g’ filename

6 四. 出错信息和退出状态 操作系统命令出错: sed -r ‘s/this/that/’ myfile
显示: sed: ERROR: Illegal option – r 退出状态: 1 sed -n ‘s/this/that/’ newfile 显示: sed: ERROR: Cannot open newfile: No such file or directory 退出状态: 2

7 sed -n ‘s/this/that’ newfile s/this/that
2. 正则表达式出错和模式不匹配: sed -n ‘s/this/that’ newfile 显示: sed: ERROR: Command garbled: s/this/that 退出状态: 0 sed -n ‘s/this/that/’ newfile 显示: 无 (文件中无this字符串匹配) 退出状态: 0

8 3. 出错信息保存和退出状态检测 特别强调: 命令运行结果放在标准输出上 fd = 1 缺省为荧光屏 出错信息放在标准错误输出上
( 这两者的输出都是荧光屏, 有何区别? )

9 sed –n ‘1,$s/abc/xyz/’ file 2> err_log (这两条命令功能上的区别是什么?)
保存出错信息: sed –n ‘1,$s/abc/xyz/’ file 2> err_log 或: sed –n ‘1,$s/abc/xyz/’ file 2>> err_log (这两条命令功能上的区别是什么?) 检测退出状态: ① echo $? ② if [ $? -eq 0 ] 其它间接处理 then 正常处理 else 出错处理 fi

10 五. sed应用实例 打印文件内容: p命令 sed -n ‘22, 35p’ file1 打印file1的第22~35行
sed -n ‘/string/p’ file2 打印file2中包含string的行 sed -n ‘9, /^uestc/p’ file3 打印file3中第9行到以uestc开头的行 sed -n ‘/[Cc]hina/p’ file4 打印file4中包含China或china的行

11 (这几条命令的输出是什么? 加了任选项-n后又如何?)
2. 删除文件内容: d命令 sed ‘76d’ file5 删除file5中的第76行 sed ‘9,$d’ file6 删除file6中第8行以后的所有行 sed ‘/co*ool/d’ file7 删除file7中包含cool, coool, cooool ……等等的行 (这几条命令的输出是什么? 加了任选项-n后又如何?)

12 3. 替换文件内容: s命令 sed -n ‘s/beijing/shanghai/g’ table1 将table1中所有的beijing替换为shanghai sed -n ‘s/^ *uid/username/p’ ulist 将ulist中以零至多个空格开头后跟uid 的字符串替换为username 4. 多次编辑: e命令 sed -e ’1,5d’ -e ‘s/good/bad/’ report 将report中的第1~5行删除, 同时将good 替换为bad

13 this is an inserted line’ course 在course中的以operation开头的行后加入
sed ‘/^operation/a\ this is an inserted line’ course 在course中的以operation开头的行后加入 this is an inserted line一行 . course中有多行以operation开头时会怎样? . 不是另加一个新行, 而是在某行中加入字符串, 如 何操作? . 插入行不止一行, 而是多行怎么办?

14 特别说明: 不同的UNIX操作系统版本中, sed的格 式和语法可能有少量的差异, 使用时可 参照联机手册(man命令).
教材中的例子大部分是在C_shell下进 行的, 在B_shell或K_shell下可能有少量 的差异. 但这些差异只反映在shell命令 中, 而不会反映在编辑命令(表达式)中


Download ppt "第二章 流编辑器sed 一. 什么是流编辑器? 流编辑器是一种流水线型的、非交互式"

Similar presentations


Ads by Google