1.Vi
2.grep
3.cut
4.sort
5.uniq
6.wc
7.diff
8.who/w
vi全屏幕编辑器的使用
• vi的特点、及几个基本概念
• vi的三种模式,及之间的切换
• 光标移动指令
• 删除指令
• 复制、粘贴指令
• 查找及替换指令
• 其他指令
vi简介
vi的特点、及几个基本概念
1.由行编辑器发展而来
2.双手不必离开键盘就可完成所有操作
3.不依赖于鼠标和功能键(home/end/pageup/pagedown/...)
4.在命令模式下,所有的输入都当作命令看待
5.在文本输入模式下,所有的输入都当作文本
vi的三种模式,及模式间切换
• 命令模式到文本模式切换:i a o I A O
i (insert) 在光标所在位置插入(当前字符前)
a (append)在光标所在位置后插入(当前字符后)
I 在当前行首插入 A在当前行尾插入
o (open) 在光标所在当前行的下面插入新行
O 在光标所在当前行的上面加入新行
扩展命令模式(长命令模式)
在命令模式下输入:,在屏幕下方出现:提示符,等待 用户输入其他指令。
•vi的启动
•vi的退出
光标移动指令
• 对应方向键移动
h 左移一字符 k 上移一行 j 下移一行 l 右移一字符
• 按单词单位移动
b 移到词首 e 移到词尾 w 移到下一词首
• 按行单位移动
0 移到行首 $ 移到行尾
nG 移到第n行 G 移到最后一行
• 按页单位移动
^ f 下卷一屏 ^ b 上卷一屏
^ d 下卷半屏 ^ u 上卷半屏
删除字符指令
• x 删除当前光标处的字符
• X 删除当前光标前一个字符
• d 删除从当前开始的n个字符
• d0 删除从当位置到行首的所有字符
• d$ 删除从当位置到行尾的所有字符
• dw 删除从当位置到下一个词首的所有字符
• dG 删除从当位置到文档末的所有字符
• d1G 删除从当位置到文档开始处的所有字符
• dd 删除当前行
复制与粘贴指令
• 复制 yank
y复制从当前位置开始的n个字符
yw 复制从当前位置到下一词首
y0 复制从当前位置到行首的所有字符
y$ 复制从当前位置到行尾的所有字符
yG 复制从当前位置到文档末的所有字符
y1G复制从当前位置到文档开始的所有字符
yy复制整行
• 粘贴put
p 将复制的内容 粘贴到光标后
P 将复制的内容 粘贴到光标前
查找和替换指令
查找
/string 从光标当前位置向下查询字符串string
?string 从光标当前位置向上查询字符串string
n 重复上次向下查找
N 重复上次向上查找
查找和替换指令
替换指令(扩展命令模式下)
(1):1,$s/oldstr/newstr/g
在全文范围用newstr替换oldstr
(2):n,ms/oldstr/newstr/g
在第n行到第m行内用newstr替换oldstr
说明参数g后可跟参数c,表示在替换前需用户确认。
如:
:1,20s/jason/Jason/gc
在1到20行内用Jason替换jason,并每次替换要求用户确认。
其他指令
• u undo 撤消上一次操作
• U 撤消对当前行的所有操作,恢复到原来状态。
• :e newfilename 不退出vi,编辑其他文件
• :r otherfilename 在光标位置读入其他文件
• :!cmd 执行shell命令cmd
• :r!cmd 执行shell命令并把运行结果插入当前光标处
• :n,m w filename 把第n到m行的内容存入文件
字符串查找(grep)
• grep
在文件中搜索含有特定字符串模式的行,并显示出来。
命令格式:grep
-c 只显示符合字符串模式的总行数
-l 只显示符合字符串模式的文件的文件名
-n 显示符合字符串模式的行的行号
-v 显示不含字符串模式的行
-y 不区分字母的大小写
字符串模式中的特殊符号:
. 匹配任一字符
* 匹配任意多个字符
^ 匹配行首
$ 匹配行尾
[] 匹配[]中的任意字符
[^
字符串查找(续)
%
搜索myfile文件,显示所有包含字符串ab的行。
%
搜索myfile文件,显示所有以字符串ab开头的行。
%
搜索myfile文件,显示所有不以字符串ab开头的行。
%
显示当前目录下所有包含字符串hello/Hello的文件的文件名。
grep在命令输出中的过滤作用:
配合管道命令
ls
who
ps
摘取指定的列(cut)
• 从文本每行中摘取指定字符或字段
• 通过列位置方式:指定列位置
cut -c1-20 a.txt
从文本a.txt的每行中提取头20个字符
• 通过字段位置方式,默认分割符为TAB,可通过-d参数后跟单字节符来指定分割符。
cut -d: -f1,3,4 /etc/passwd
抽取passwd文件的用户名,uid,gid
对比:
grep 抽取满足条件的行, cut 抽取指定的列
按关键字排序(sort)
• 对文本按指定的字段排序,若没指定字段,则把整行作为关键字。默认按字典序排序,对于数字字段可指定按数字序排序。
• 字段的分割默认为tab,可通过-t参数指定其他单字节符号。
• sort -t: +0 -1 /etc/passwd
按字段用户名排序
• sort -t: +2n -3 /etc/passwd
对第三个字段uid按数字序排序,
• 可同时对多个字段排序
sort -t: +6 +0 -1 /etc/passwd
先对shell名排序,然后按用户名排序
• 说明:
指定对第m个字段的方法是: +(m-1) -m
• 字段后跟的n表示按数字序
• 参数-r 表示逆序输出
sort -r -t: +6 +0 -1 /etc/passwd
删除文本中重复的行(uniq)
• 用于比较输入流中相邻的两行,若重复则删除重复的行,通常与sort配合。
• 如列出当前系统注册用户使用的shell
cut -d: -f7 /etc/passwd | sort | uniq
文件字数统计(wc)
• 统计文本文件中字符、单词、行出现的次数
• -l统计行数
• -w统计单词数
• -c统计字符数
• wc -l /etc/passwd,统计用户个数
• wc -w a.txt 统计文件中出现的单词数
综合例子
有如下国家信息文件country.txt,包含以下字段:国家名、首都、所在洲、使用语言,字段间用“,”分割。
England,Landon,Europe,English
China,Beijing,Asia,Chinese
Japan,Tokyo,Asia,Japanese
America,W.S.DC,America,English
France,Paris,Europe,Franch
......
1、统计国家信息文件中出现的所有语言
cut
2、统计亚洲国家所使用的语言数量
grep
3、统计欧洲国家讲英语的国家数量
grep
比较两个文件不同(diff)
比较两个文本文件的差别,通常用于修改过文件同原备份文件的比较
格式:
输出格式:
n1
n1,n2
n1,n2
每个输出命令后面列出了两个文件不同点的行,用“<”“>”区分
“<”表示后面的输出内容为file1的