(一)vim末行模式
- vim末行模式:内建的命令行接口
- 地址定界
- start_pos[,end_pos]
- #:特定的第#行,例如5即第5行
- .:表示当前行
- $:表示最后一行,例如.,$-1表示从当前行到倒数第2行
- #,#:指定行范围,左侧为起始行,右侧为结束行,例如10,100表示从第10行到第100行共91行
- #,+#:指定行范围,左侧为起始行,右侧为偏移量,例如3,+7表示从第3行开始加后面7行共8行
- %:表示全文,等于1,$
- /PATTERN/:从光标位置往下,第一个被PATTERN匹配到的行,例如/Pattern/,$表示从匹配行到最后一行
- 可同编辑命令一同使用,实现编辑操作
- d/删除,y/复制,c/修改
- 中间没有空格,编辑命令直接跟在地址定界后面
- w FileName/内容另存为
- r FileName/将另外一个文件合并进来
- 查找
- /PATTERN:从光标所在处开始,往后查找所有被PATTERN匹配到的字符串,光标停在第一个匹配到的字符串
- ?PATTERN:从光标所在处开始,往前查找所有被PATTERN匹配到的字符串,光标停在第一个匹配到的字符串
- n:下一个查找结果,与命令方向相同
- N:上一个查找结果,与命令方向相反
- 查找并替换
- s/用来查找的内容/用来替换的内容/修饰符
- 用来查找的内容:正则表达式
- 用来替换的内容:不能使用正则表达式,但是可以引用
- 如果“用来查找的内容”在模式中使用了分组符号,在“用来替换的内容”中可以使用后项引用\1,\2...
- 或者直接引用“用来查找的内容”匹配到的全部文本,要使用&符号
- 如果内容本身就带有/符号,需要添加\进行转义
- 也可以将/变成其它不常用的字符,这样内容本身的/符号就不需要转义了,例如使用@符号,或者#符号等等
- 修饰符
- i:忽略大小写(忽略查找的PATTERN中的大小写)
- g:全局替换,意味着一行中如果匹配到多次,则均替换;默认只替换每一行中的第一次出现
- 例子
- 1,20s/this/This/g
- %s@\<t\([[:alpha:]]\+\)\>@T\1@g:在全文中将所有的小写t开头的单词转换为大写T开头的单词
- %s@\<t[[:alpha:]]\+\>@&er@g:在全文中将所有小写t开头的单词后面加er
- %s@^#@@:删除每一行前面的#号
- s/用来查找的内容/用来替换的内容/修饰符
- 地址定界
练习:
1,复制/etc/grub2.cfg文件至/tmp目录中,用查找替换命令删除/tmp/grub2.cfg文件中所有行前面的空白字符
答案:
cp /etc/grub2.cfg /tmp
vim /tmp/grub2.cfg
:
%s@^[[:space:]]\+@@
2,复制/etc/rc.d/init.d/functions文件至/tmp目录中,用查找替换命令为/tmp/functions文件中每个以空白字符开头的行的行首加上#
答案:%s@^[[:space:]]\+[^[:space:]]@#&@
3,为/tmp/grub2.cfg文件的前三行的行首加上#号
答案:1,3s/*/#&/
4,将/etc/yum.repos.d/CentOS-Base.repo文件中所有的enabled=0替换为enabled=1,所有的gpgcheck=0替换为gpgcheck=1
答案:%s@\(enabled\|gpgcheck\)=0@\1=1@g
- vim的多文件模式
- vim FILE1 FILE2 FILE3...
- 在文件间切换:first/第一个文件,last/最后一个文件,next/下一个文件,previous/前一个文件
- 保存并退出所有文件:wqall
- 保存所以文件:wall
- 退出所有文件:qall
- 多窗口
- 多文件
- -o:水平分隔;ctrl+w,松开后按上下箭头,可以切换文件;vim -o FILE1 FILE2 FILE3
- -O:垂直分隔;ctrl+w,松开后按左右箭头,可以切换文件
- 单文件
- ctrl+w,松开后按s,水平分隔单文件
- ctrl+w,松开后按v,垂直分隔单文件
- 多文件
- 定制vim的工作特性
- 末行模式下的命令设定,仅对当前vim进程有效 想永久有效,需要修改配置文件;直接把末行命令写在配置文件里就行
- 全局:/etc/vimrc
- 用户个人:~/.vimrc,如果文件不存在,需要自己创建
- 行号
- 显示:set number或者set nu
- 取消:set nonumber或者set nonu
- 括号匹配高亮(貌似现在vim一直高亮,命令无效了>_<)
- 显示:set showmatch或者set sm
- 取消:set noshowmatch或者set nosm
- 自动缩进
- 启用:set ai
- 禁用:set noai
- 高亮搜索结果
- 启用:set hlsearch
- 禁用:set nohlsearch
- 语法高亮
- 启用:syntax on
- 禁用:syntax off
- 忽略字符大小写
- 启用:set ic
- 禁用:set noic
- 在末行模式下,可以用help命令获得帮助,也可以help subject获得某个主题的帮助,如help set
- 末行模式下的命令设定,仅对当前vim进程有效 想永久有效,需要修改配置文件;直接把末行命令写在配置文件里就行
作业:如果设置tab键缩进4个字符,而不是8个
(二)bash脚本编程的算术运算
- 算术运算符:+,-,*,/,**,%
- 算术运算格式
- let var=算术运算表达式
- $[算术运算表达式]
- $((算术运算表达式))
- expr命令
- 各个操作数和操作符之间都要有空格
- 要想获得结果,需要使用命令引用
- 注:乘法符号在某些场景中需要使用转义字符
练习:写一个脚本,添加三个用户,求这三个用户的UID之和