一,vi的常用命令
0: 移动到该行首
$: 移动到该行末
G: 移动到文件的最后行
nG: 移动到文件第n行
dd: 删除光标所在的行
ndd: 删除包括光标在内所在行的n行文本
u: 恢复刚才被修改过的文本
文件的内容查找
/word 表示从上而下在文件中查找字符串“word”
?word 表示从下而上在文件中查找字符串“word”
文件的修改
栗子:
将50到100行之间的old改为new,并且一个个挑选是否需要修改
:50,100s/old/new/gc 加上c命令,将对每个替换动作提示用户确认
复制 51 到 60 行这十行的内容,粘贴到最后一行之后
51,60 co $
选中所有空行,然后删除它们
:g/^\s*$/d
:g 表示在全文档范围内
^ 代表行的开始
\s* 代表空白字符
$ 代表行的结束
d 表示删除
二,grep命令和正则表达式的使用
-c 统计文件或者文本中包含匹配字符串的行数 grep -c "file" file.txt
-n 输出包含匹配字符串的行数 grep -n "file" file.txt
grep和正则表达式的一些实用案例
匹配含有“408” 这个字符串的行
grep -n "\<408\>" file.txt
解释 :\<408\>这里因为是字符串,所以加上\<和\>来确定词首和词尾的锚定。
查找含有代码为1001或1002的行
grep -n 100[12] file.txt
显示行首不是4或5的行
grep -n ^[^45] file.txt
查找所有行中,包含以K为开头,以D结尾的字符串的行
grep -n '\<K[[:alnum:]]*D\> ' file.txt
grep -n '\<K[a-zA-Z0-9]*D\>' file.txt
解释:[[:alnum:]]表示匹配字母或者数字字符。后面加*,是因为要匹配多个。*表示匹配前面的字符任意次。