1 / 27

第 3 章 UNIX 文本编辑程序

第 3 章 UNIX 文本编辑程序. UNIX 的文本编辑程序. 常用的文本编辑器 行编辑 ed 全屏幕编辑 vi 使用场合 行编辑 ed 常用于脚本程序中,使用输入重定向 例如:安装软件时,用来修改系统配置文件 vi 用于人机交互式编辑文本文件. vi 的启动方法. 命令格式 vi 文件名列表 后边可以指定 0 个或者多个文件 例如 vi try.c. 设置 vi 选项( 1 ). vi 有 40 多个选项控制 vi 的运行 , 有两种设定方法 使用 .exrc 文件 vi 启动时自动读取用户主目录下文件 .exrc 获取自设定的 vi 选项

greg
Télécharger la présentation

第 3 章 UNIX 文本编辑程序

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第3章 UNIX文本编辑程序

  2. UNIX的文本编辑程序 • 常用的文本编辑器 • 行编辑ed • 全屏幕编辑vi • 使用场合 • 行编辑ed常用于脚本程序中,使用输入重定向 • 例如:安装软件时,用来修改系统配置文件 • vi用于人机交互式编辑文本文件

  3. vi的启动方法 • 命令格式 • vi 文件名列表 后边可以指定0个或者多个文件 • 例如 vi try.c

  4. 设置vi选项(1) • vi有40多个选项控制vi的运行,有两种设定方法 • 使用.exrc文件 • vi启动时自动读取用户主目录下文件.exrc获取自设定的vi选项 • 例如:文件.exrc中含有如下两行: • set number 每一行时,在左边列出行号 • set showmode 在屏幕右下角标志出当前状态

  5. 设置vi选项(2) • 在vi中键入set命令 • 命令格式 • 设置选项 :set option • 取消选项 :set nooption • 例如 • :set number 每行左边列出行号 • :set nonumber 每行左边不列出行号 • :set showmode 屏幕右下脚标出当前状态 • :set noshowmode屏幕右下脚不标出当前状态 • :set all 列出所有开关的当前状态

  6. vi的两种工作状态(1) • 命令状态:键盘输入解释为命令 • vi一启动就进入命令方式,键盘输入解释为命令 • 一般按键无回显 • 以冒号可以引入ex命令和查找命令 • 编辑命令 i a 等,可以从命令状态转到文本状态

  7. vi的两种工作状态(2) • 文本状态 • 键盘输入解释为输入的文本 • 可以输入多行,每输入完一行后按回车转入下一行 • 正文输入时有回显 • 输入完毕按键盘左上角的Esc键,返回到命令状态

  8. 基本编辑命令

  9. 正文插入 • 命令 i • 在当前字符前插入正文段,直至按Esc键(insert) • 命令 a • 在当前字符后插入正文段,直至按Esc键(append) • 命令 o • 在当前行后插入正文段,直至按Esc键(open) • 命令 O • 在当前行前插入正文段,直至按Esc键(open)

  10. 光标单字符移动 • 单字符移动(四个字母键盘上相邻的按键) • h 光标左移一列 • j光标下移一行 • k 光标上移一行 • l 光标右移一列 • 有的终端可以直接使用键盘上的方向键代替这四个字母 • 命令前加一整数,表示这个命令连续执行多少遍 • 5h光标左移5列 • 6j 光标下移6行 • 23k光标上移23行 • 10l 光标右移10列 • 注意:在vi命令状态下的按键命令没有回显

  11. 翻页 • 命令 • Ctrl-b向后翻页(Backward) • Ctrl-f向前翻页(Forward) • Ctrl-u 向上翻半页(Up) • Ctrl-d 向下翻半页(Down) • 注意 • vi把文件尾方向定义为向前,文件头方向定义为向后 • 有的键盘用PgDn键代替Ctrl-f,用PgUp键代替Ctrl-b • 也可以使用下面的命令 • 6Ctrl-f向前翻6页 • 15Ctrl-b向后翻15页

  12. 光标行内快速移动 • 行尾行首 • 将光标移至当前行首 ^ • 将光标移至当前行尾 $ • 移动一个单词 • 移到右一个单词 w W • 移到左一个单词 b B • 也可以使用6w 3W 5b 10B命令 • wb与WB区别:对“单词”分界符的定义不同 • wb命令:非字母,数字,下划线之外的字符 • WB命令:仅以空白符(空格/制表符/回车)

  13. 光标移动到指定行 • 移到指定的行 • :476 将光标定位于第476行 • :1 将光标定位于第1行(文件首) • :$  将光标定位于文件尾 • :$-10将光标定位于文件倒数第10行 • 在描述行号时可以使用 • 圆点(.)代表当前行号, • $ 代表最后一行的行号 • 括号配对 % • 把光标移到一个花括号(或圆括号,或方括号)上,按%键,则光标自动定位到与它配对的那一个括号

  14. 删除命令和剪贴板 注:被删除的内容进入剪贴版 • 删除字符 • 删除当前字符的命令 x • 命令5x删除从当前光标开始的5个字符 • 删除行 • 删除当前行的命令 dd • 命令3dd删除从当前行开始的3行 • 删除块 • 删除到配对括号命令:将光标定位在括号上 d% • 复制到剪贴板yank(不删除,只拷贝到剪贴板) • yy与y% • paste取出剪贴板中内容 p

  15. 字符替换 • 替换光标处字符 r • ra命令将当前光标处字符替换为a • 将当前光标处开始的三个字符依次替换为abc,则需要按命令rarbrc • 替换若干字符 R • 例:命令Rabcdef,然后按Esc键 • 该命令把从当前光标开始的字符依次替换为abcdef,用Esc来结束多字符替换命令

  16. 取消和重复 • 取消上一次的编辑操作(undo) u • 如:误删了一段正文,用u命令可撤销删除 • 如:把文件中的所有abc字符串替换成xyz字符串, 用u命令可撤销替换 • 重复上一次的编辑操作 . • 按圆点键,可以重复上一次的编辑操作 • 例如:按3dd命令删除了三行,然后按圆点键就再删除三行,接着连续按圆点键,每按一次删三行

  17. 文件操作命令 • 存盘退出 • ZZ • :wq<CR> • 存盘不退出 • :w<CR> • 不存盘退出 • :q!<CR> • 读入文件xyz.c插入到当前行之下 • :r xyz.c<CR> • 写文件,把第50行至文件尾的内容写到文件file1中 • :50,$w file1<CR> • :50,$w! file1<CR>强制覆盖

  18. 块操作 • 删除,并拷贝到剪贴板 • :10,50d<CR> 删除第10-50行 • :1,.d<CR> 删除文件首至当前行的部分 • :.,$d<CR>删除当前行到文件尾 • 不删除,拷贝到剪贴板 • :10,50y<CR> • 复制 • :5,10co56<CR>复制第5-10行到第56行之下 • 移动 • :8,34m78<CR>移动第8-34行到第78行之下

  19. 行合并、刷屏和状态显示 • 两行合并(Join) J • 当前行下面的行合并到当前行 • 刷新屏幕显示(load) Ctrl-l • 状态显示 Ctrl-g • 在屏幕最下面一行列出正在编辑的文件的名字,总行数,当前行号,文件是否被修改过等信息

  20. 查找与替换

  21. 模式查找 用“正则表达式”来描述一个字符串模式 • 查找命令 • 格式 /pattern • 例: /[0-9][0-9]* • 继续查找命令 • n向下查找下一个next • N向上查找下一个 • 循环式搜索

  22. 模式替换(1) • 替换命令 (substitution) • 格式 :n1,n2s/pattern/string/g • 例 • :1,50s/abc/xyz/ • :1,50s/abc/xyz/g • :50,80s/^// 第50-75行右移4列 • :50,80s/^// 第50-75行左移4列 • :1,$s/ *$// 消除尾部多余的空格 • :1,$s/a[i]/b[j]/g 不能把a[i]替换为b[j] • :1,$/a*b/x+y/g

  23. 模式替换(2) • 替换字符串中字符&代表被模式所匹配的那部分 • 例 设文件当前只含有2行,每行为一个整数,内容为 5 6 10 执行命令 :1,$s/[0-9][0-9]*/192.168.24.& host&/ 192.168.24.5 host5 192.168.24.6 host6 192.168.24.10 host10

  24. 模式替换中的转义符 尤其是编辑C语言源程序时需要 • 将a[i]*b[j]替换为x[k]*y[n]的命令 • :1,$s/a\[i]\*b\[j]/x[k]*y[n]/g • 将buf.len/1000替为buffer.size/1024的命令 • :1,$s/buf\.len\/1000/buffer.size\/1024/g • 模式串和替换字符串中的斜线前加转义符\以区别于替换命令格式中所必须的斜线 • 将*pointer替换为&record :1,$s/\*pointer/\&record/g

  25. 更灵活的替换(1) • 模式描述中增加\(和\) • 在正则表达式中圆括号,仍然代表它自身 • 在正则表达式中出现的\(和\)不影响匹配操作 • 例 • [a-zA-Z_][a-zA-Z0-9_]*->number • \([a-zA-Z_][a-zA-Z0-9_]*\)->number • 替换字符串中的 \0 \1 \2 ……

  26. 更灵活的替换(2) • 将“变量名->number”替换为“变量名->num” :1,$s/\([a-zA-Z_][a-zA-Z0-9_]*\)->number/\1->num/g • 将日期格式“月-日-年”改为“年.月.日”, 比如:将 04-26-1997替换为1997.04.26使用命令: :1,$s/\([0-9][0-9]\)-\([0-9][0-9]\)-\([0-9][0-9]*\)/\3.\1.\2/g • 替换字符串中的&可以用\0代替 :1,$s/[0-9][0-9]*/192.168.24.& host&/ 也可以用 :1,$s/[0-9][0-9]*/192.168.24.\0 host\0/

  27. 其他软件中的应用 • 其他软件也使用正则表达式实现灵活的字符串匹配与替换 • UNIX命令ed,sed,expr • Cisco路由器的IOS配置 • Windows的Visual C++的编辑器 • 不同软件中的正则表达式定义可能会有些差别

More Related