linux学习23 Linux运维必备技能-vim编辑器高效用法进阶
一、vim末行模式
1、地址定界
a、:start_pos[,end_pos]
#特定的第#行,例如5即第5行
.:当前行
$:最后一行;
#,#:指定行范围,左侧为起始行,右侧为结束行;
#,+#:指定行范围,左侧为起始行绝对编号,右侧为相对左侧行号的偏移量;
例如:3,+7:表示从第三行开始,然后增加七行。
.,$-1:表示从当前行到倒数第二行
1,$:表示全文,也可以用%表示
/pattern/:从光标所在处开始向文件尾部第一次被这个指定的模式所匹配到的行
/first/,$ :表示从当前光标开始第一次能被first匹配到的行开始到最后一行结束
/pat1/,/pat2/:从光标所在处起始,第一次由pat1匹配到的行开始至第一次由pat2匹配到的行结束之间的所有行
b、可同编辑命令一同使用,实现编辑操作
d
y
c
w /PATH/TO/SOMEFILE:将范围内的文本保存至指定的文件中;
r /PATH/FROM/SOMEFILE:将指定的文件中的文本读取并插入至指定位置
2、查找
/PATTERN:从当前光标所在处向文件尾部查找能够被当前模式匹配到的所有字符串
?PATTERN:从当前光标所在处向文件首部查找能够被当前模式匹配到的所有字符串
n:下一个,与命令方向相同
N:上一个,与命令方向相反
3、查找并替换
a、s末行模式的命令;使用格式:
s/要查找的内容/替换为的内容/修饰符
要查找的内容:可使用正则表达式
替换为的内容:不能使用正则表达式,但是可以引用;
如果"要查找的内容"部分在模式中使用分组符号,在"替换为的内容"中使用后向引用;
直接引用查找模式匹配到的全部文本,可使用&符号。
修饰符:
i:忽略大小写;
g:全局替换,意味着一行中如果匹配到多次,则均替换
图中的意思是: 1,20表示定界,即1到20行,后面的s/this/This/表示将this替换成This,不过只会替换匹配到的第一个。如果要每一行中的每一次出现都替换的话需要写成s/this/This/g。如果在替换时不想区分大小写即任何大小写字符的this都替换成This就需要写成 s/this/This/ig
可把分隔符替换为其它非常用字符:
s@@@
s###
示例:替换全文中所有以小写t开头的单词通通替换为大写
%s@\<t\([[:alpha:]]\+\)\>@T\1@g
所有以t开头的单词背后都给加上er
%s@\<t[[:alpha:]]\+\>@&er@g
将所有以#开头的行的#去掉
%s@^#@@g
b、练习
1、复制/etc/grub2cfg文件至/tmp目录中,用查找替换命令删除/tmp/grub2.cfg文件中以空白字符开头的行的行首的空白字符
%s@^[[:space:]]\+@@g
2、复制/etc/rc.d/init.d/functions文件至/tmp目录中,用查找替换命令为/tmp/functions文件的每个以空白字符开头的行的行首加上#;
%s@^[[:space:]]\+[^[:space:]]@#&@g
3、为/tmp/grub2.cfg文件的前三行的行首加上#号
1,3s@^.*$@#&@
4、将/etc/yum.repos.d/CentOS-Base.repo文件中所有的enabled=0替换为enabled=1,所有的gpgcheck=0替换为gpgcheck=1
%s@\(gpgcheck\|enabled\)=0@\1=1@g
二、vim的多文件功能
1、多文件:
a、用法 vim FILE1 FILE2...
b、在文件间切换
:next 下一个
:prev 上一个
:first 第一个
:last 最后一个
c、退出所有文件
:wqall 保存所有文件并退出
:wall
:qall
2、多窗口
a、-o:水平分割窗口
[root@node1 ~]# vim -o fstab fstab.new fstab.patch
同时按Ctrl + w然后再按住上或者下就可以切换屏幕
b、-O:垂直分割窗口
[root@node1 ~]# vim -O fstab fstab.new fstab.patch
同时按住Ctrl + w然后再按左或者右就可以切换屏幕
c、单个文件也可以分割为多个窗口进行查看:
Ctrl + w,然后松开,然后再按s:水平分割窗口
Ctrl + w,然后松开,然后再按v:垂直分割窗口
d、q或者wq等等只是退出当前文件,使用qall或者wqall才会退出所有
三、定制vim的工作特性
1、注意
a、在末行模式下的设定仅对当前vim进程有效
b、永久有效的话就需要编辑配置文件
全局:/etc/vimrc
用户个人:~/.vimrc 。在此文件中加入set nu时打开文件都会显示行号。
2、行号
显示:set number,可简写为set nu
取消显示:set nomber,也可简写为set nonu
3、括号匹配高亮
匹配:set showmatch,set sm
取消:set nosm
4、自动缩进功能
启用:set ai
取消:set noai
5、高亮搜索
启用:set hlsearch
禁用:set nohlsearch
6、语法高亮
启用:syntax on
禁用:syntax off
7、忽略字符大小写
启用:set ic
禁用:set noic
8、获取帮助
:help
:help subject
四、课外作业
如何设置tab键缩进4个字符
五、bash脚本编程之算术运算
1、+,-,*,/,**(次方),%(取余或取模)
2、算数运算格式
a、let VAR=算数运算表达式
[root@node1 ~]# num1=2 [root@node1 ~]# num2=9 [root@node1 ~]# let sum=$num1+$num2 [root@node1 ~]# echo $sum 11
b、VAR=$[算术运算表达式]
[root@node1 ~]# num3=5 [root@node1 ~]# num4=11 [root@node1 ~]# echo $[$num3+$num4] 16
c、VAR=$((算术运算表达式))
[root@node1 ~]# num3=5 [root@node1 ~]# num4=11 [root@node1 ~]# echo $(($num3+$num4)) 16
d、VAR=$(expr $ARG1 $OP $ARG2) #中间的空格不能省略。
[root@node1 ~]# num3=5 [root@node1 ~]# num4=11 [root@node1 ~]# echo $(expr $num3 + $num4) 16
e、注意:乘法符号在有些场景中需要使用转义符。
3、练习:写一个脚本,完成如下功能
添加三个用户;
添加完以后求三个用户的UID之和