第 3 章 unix 文本编辑程序

27
第3第 UNIX 第第第第第第

Upload: greg

Post on 25-Jan-2016

132 views

Category:

Documents


3 download

DESCRIPTION

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

TRANSCRIPT

Page 1: 第 3 章  UNIX 文本编辑程序

第 3 章 UNIX 文本编辑程序

Page 2: 第 3 章  UNIX 文本编辑程序

第 3 章 第 2页

UNIX 的文本编辑程序 常用的文本编辑器

行编辑 ed全屏幕编辑 vi

使用场合行编辑 ed 常用于脚本程序中,使用输入重定向

例如:安装软件时,用来修改系统配置文件vi 用于人机交互式编辑文本文件

Page 3: 第 3 章  UNIX 文本编辑程序

第 3 章 第 3页

vi 的启动方法 命令格式

vi 文件名列表后边可以指定 0 个或者多个文件

例如 vi try.c

Page 4: 第 3 章  UNIX 文本编辑程序

第 3 章 第 4页

设置 vi 选项( 1 ) vi 有 40 多个选项控制 vi 的运行 , 有两种设定

方法 使用 .exrc 文件

vi 启动时自动读取用户主目录下文件 .exrc 获取自设定的 vi 选项

例如:文件 .exrc 中含有如下两行:set number 每一行时,在左边列出行号set showmode 在屏幕右下角标志出当前状态

Page 5: 第 3 章  UNIX 文本编辑程序

第 3 章 第 5页

设置 vi 选项( 2 ) 在 vi 中键入 set 命令

命令格式设置选项 :set option 取消选项 :set nooption

例如:set number 每行左边列出行号:set nonumber 每行左边不列出行号:set showmode 屏幕右下脚标出当前状态:set noshowmode屏幕右下脚不标出当前状态:set all 列出所有开关的当前状态

Page 6: 第 3 章  UNIX 文本编辑程序

第 3 章 第 6页

vi 的两种工作状态( 1 ) 命令状态:键盘输入解释为命令

vi 一启动就进入命令方式,键盘输入解释为命令一般按键无回显以冒号可以引入 ex 命令和查找命令编辑命令 i a 等,可以从命令状态转到文本状态

按Esc键命令状态

文本状态

命令i,a等

正文编辑命令

Page 7: 第 3 章  UNIX 文本编辑程序

第 3 章 第 7页

vi 的两种工作状态( 2 ) 文本状态

键盘输入解释为输入的文本可以输入多行,每输入完一行后按回车转入下一行正文输入时有回显输入完毕按键盘左上角的 Esc 键,返回到命令状态

Page 8: 第 3 章  UNIX 文本编辑程序

基本编辑命令

Page 9: 第 3 章  UNIX 文本编辑程序

第 3 章 第 9页

正文插入 命令 i

在当前字符前插入正文段,直至按 Esc 键 (insert)

命令 a在当前字符后插入正文段,直至按 Esc 键 (append)

命令 o在当前行后插入正文段,直至按 Esc 键 (open)

命令 O在当前行前插入正文段,直至按 Esc 键 (open)

Page 10: 第 3 章  UNIX 文本编辑程序

第 3 章 第 10页

光标单字符移动 单字符移动(四个字母键盘上相邻的按键)

h 光标左移一列j 光标下移一行k 光标上移一行l 光标右移一列有的终端可以直接使用键盘上的方向键代替这四个字母

命令前加一整数,表示这个命令连续执行多少遍5h 光标左移 5 列6j 光标下移 6 行23k 光标上移 23 行10l 光标右移 10 列注意:在 vi 命令状态下的按键命令没有回显

Page 11: 第 3 章  UNIX 文本编辑程序

第 3 章 第 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 页

Page 12: 第 3 章  UNIX 文本编辑程序

第 3 章 第 12页

光标行内快速移动 行尾行首

将光标移至当前行首 ^将光标移至当前行尾 $

移动一个单词移到右一个单词 w W移到左一个单词 b B也可以使用 6w 3W 5b 10B 命令

wb 与 WB 区别:对“单词”分界符的定义不同wb 命令:非字母,数字,下划线之外的字符WB 命令:仅以空白符(空格 / 制表符 / 回车)

Page 13: 第 3 章  UNIX 文本编辑程序

第 3 章 第 13页

光标移动到指定行 移到指定的行

:476 将光标定位于第 476 行:1 将光标定位于第 1 行(文件首):$ 将光标定位于文件尾:$-10 将光标定位于文件倒数第 10 行

在描述行号时可以使用圆点( . )代表当前行号,$ 代表最后一行的行号

括号配对 %把光标移到一个花括号 ( 或圆括号,或方括号 ) 上,

按 % 键,则光标自动定位到与它配对的那一个括号

Page 14: 第 3 章  UNIX 文本编辑程序

第 3 章 第 14页

删除命令和剪贴板注:被删除的内容进入剪贴版 删除字符

删除当前字符的命令 x命令 5x 删除从当前光标开始的 5 个字符

删除行删除当前行的命令 dd 命令 3dd 删除从当前行开始的 3 行

删除块删除到配对括号命令:将光标定位在括号上 d%

复制到剪贴板 yank( 不删除,只拷贝到剪贴板 )yy 与 y%paste 取出剪贴板中内容 p

Page 15: 第 3 章  UNIX 文本编辑程序

第 3 章 第 15页

字符替换 替换光标处字符 r

ra 命令将当前光标处字符替换为 a将当前光标处开始的三个字符依次替换为 abc ,则

需要按命令 rarbrc 替换若干字符 R

例:命令 Rabcdef ,然后按 Esc 键该命令把从当前光标开始的字符依次替换为 abcde

f ,用 Esc 来结束多字符替换命令

Page 16: 第 3 章  UNIX 文本编辑程序

第 3 章 第 16页

取消和重复 取消上一次的编辑操作 (undo) u

如:误删了一段正文,用 u 命令可撤销删除如:把文件中的所有 abc 字符串替换成 xyz 字符串,

用 u 命令可撤销替换 重复上一次的编辑操作 .

按圆点键,可以重复上一次的编辑操作例如:按 3dd 命令删除了三行,然后按圆点键就再

删除三行,接着连续按圆点键,每按一次删三行

Page 17: 第 3 章  UNIX 文本编辑程序

第 3 章 第 17页

文件操作命令 存盘退出

ZZ :wq<CR>

存盘不退出 :w<CR>

不存盘退出 :q!<CR>

读入文件 xyz.c 插入到当前行之下 :r xyz.c<CR>

写文件 , 把第 50 行至文件尾的内容写到文件 file1 中 :50,$w file1<CR> :50,$w! file1<CR> 强制覆盖

Page 18: 第 3 章  UNIX 文本编辑程序

第 3 章 第 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 行之下

Page 19: 第 3 章  UNIX 文本编辑程序

第 3 章 第 19页

行合并、刷屏和状态显示 两行合并 (Join) J

当前行下面的行合并到当前行 刷新屏幕显示 (load) Ctrl-l 状态显示 Ctrl-g

在屏幕最下面一行列出正在编辑的文件的名字,总行数,当前行号,文件是否被修改过等信息

Page 20: 第 3 章  UNIX 文本编辑程序

查找与替换

Page 21: 第 3 章  UNIX 文本编辑程序

第 3 章 第 21页

模式查找用“正则表达式”来描述一个字符串模式 查找命令

格式 //pattern例: /[0-9][0-9]*

继续查找命令n 向下查找下一个 nextN 向上查找下一个循环式搜索

Page 22: 第 3 章  UNIX 文本编辑程序

第 3 章 第 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

Page 23: 第 3 章  UNIX 文本编辑程序

第 3 章 第 23页

模式替换 (2) 替换字符串中字符 & 代表被模式所匹配的那部

分例 设文件当前只含有 2 行,每行为一个整数,内容

为5610

执行命令 :1,$s/[0-9][0-9]*/192.168.24.& host&/192.168.24.5 host5192.168.24.6 host6192.168.24.10 host10

Page 24: 第 3 章  UNIX 文本编辑程序

第 3 章 第 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

Page 25: 第 3 章  UNIX 文本编辑程序

第 3 章 第 25页

更灵活的替换 (1) 模式描述中增加 \( 和 \)

在正则表达式中圆括号,仍然代表它自身在正则表达式中出现的 \( 和 \)不影响匹配操作

例[a-zA-Z_][a-zA-Z0-9_]*->number\([a-zA-Z_][a-zA-Z0-9_]*\)->number

替换字符串中的 \0 \1 \2 ……

Page 26: 第 3 章  UNIX 文本编辑程序

第 3 章 第 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/

Page 27: 第 3 章  UNIX 文本编辑程序

第 3 章 第 27页

其他软件中的应用 其他软件也使用正则表达式实现灵活的字符串

匹配与替换UNIX 命令 ed , sed , exprCisco路由器的 IOS配置Windows 的 Visual C++ 的编辑器不同软件中的正则表达式定义可能会有些差别