总结vim命令行模式常见快捷方式,以及vim查找,替换的方法
vim [option] ... FILENAME ...
+ 打开文件后,让光标位于末行首字母
+# 打开文件后,让光标位于第#行的行首
+/PATTERN 打开文件后,让光标处于第一个被PATTERN匹配到的行的行首
-d file1 file2 平行打开多个文件并比较
-b filename 二进制方式打开文件
vim的模式
- 命令模式
- 编辑模式
- 末行模式
vim各模式的转换
- 命令模式-------->编辑模式
- i insert,在光标所在处输入
- I 在光标所在行的行首输入
- a append,在光标所在处的下一个字符输入
- A 在光标所在行的行尾输入
- o 在当前行的下一行新起一行输入
- O 在当前行的上一行新起一行输入
- 编辑模式-------->命令模式
- ESC
- 命令模式-------->末行模式
- :
- 末行模式-------->命令模式
- ESC
末行模式常用命令
w | 保存 |
---|---|
wq | 保存并退出 |
q | 退出 |
q! | 不保存退出 |
r filename | 读文件内容到当前文件中 |
!command | 执行命令 |
r!command | 读入命令的输出 |
命令模式常用命令
跳转
- w 跳转到下一个单词的词首
- e 当前或下一个单词的词尾
- b 当前或上一个单词的词首
- ^ 跳转至当前行首的第一个非空白字符
- 0 跳转至行首
- $ 跳转至行尾
- #G 跳转至指定行行首,#代表行号
- G 跳转至最后一行
- gg 跳转至第一行
字符编辑
- x 删除光标处的字符
- #x 删除光标处起始的#个字符
- ~ 转换大小写
- R 切换至replace模式,可直接进行更改
删除
- d$ 删除到行尾
- d^ 删除到非空行首
- d0 删除到行首
- dd 删除光标所在行
- #dd 删除多行
- D 等价于d$
复制
- y$ 复制到行尾
- y0 复制到行首
- y^ 复制到非空行首
- yy 复制光标所在行
- #dd 复制多行
粘贴
- p 粘贴到下面一行
- P 粘贴到上面一行
查找
- /PATTERN 从当前光标向后查找
- ?PATTERN 从当前光标向前查找
撤销更改
- u 撤销最近的更改
- #u 撤销之前多次更改
- U 撤销光标落在这行后所有对慈航的更改
- . 重复前一个操作
- n. 重复前一个操作n次
末行模式
查找和替换
s:在末行模式下完成查找替换操作
s/要查找的内容/替换为的内容/修饰符
要查找的内容:可使用通配符和正则表达式等
替换为的内容:不可使用通配符等,但可使用\1,\2等后向引用符号
修饰符:
i:忽略大小写
g:全局替换;默认情况下,每行只替换第一次匹配的内容
gc:全局替换,每次替换前进行询问
分隔符/可替换为其他字符
s@/etc@/var@g
s#/boot#/root#i
vim -o file1 file2
分屏显示两个文件的内容,可通过两次ctrl+w进行切换窗口
总结脚本中运算符、逻辑运算以及用法
算术运算:let
+ | - | * | / | % | ** |
---|---|---|---|---|---|
加 | 减 | 乘 | 除 | 取模 | 乘方 |
let var=算术表达式
echo ‘算术表达式’ | bc
增强型赋值
+= | -= | *= | /= | %= |
---|---|---|---|---|
自加后赋值 | 自减后赋值 | 自乘后赋值 | 自除后赋值 | 自取模后赋值 |
逻辑运算
true 1
false 0
逻辑与[ condition1 -a condition2]
逻辑或[ condition1 -o condition2 ]
逻辑非[ !condition ]
条件运算符
= | 等于 |
---|---|
== | 等于 |
!= | 不等于 |
-eq | 等于 |
-ne | 不等于 |
-lt | 小于 |
-gt | 大于 |
-le | 小于等于 |
-ge | 大于等于 |
-n | 非空字符串 |
-z | 空字符串 |
文件测试
-e file | 文件存在为真,不存在为假 |
---|---|
-b file | 是否存在且为块设备 |
-c file | 是否存在且为字符设备 |
-d file | 是否存在且为目录 |
-f file | 是否存在且为普通文件 |
-L file | 是否存在且为符号链接文件 |
-S file | 是否存在且为套接字文件 |
-s file | 文件存在且非空 |
-w file | 文件存在且可写 |
-x file | 文件存在且可执行 |
编写脚本/root/bin/backup.sh,可实现每日将/etc/目录备份到 /root/etcYYYY-mm-dd中
#!/bin/bash
echo "Start backup"
cp -a /etc/ /root/etc`date +%F`
echo "The End"
[root@centos7 data]# bash backup.sh
Start backup
The End
[root@centos7 data]# cd
[root@centos7 ~]# ls
anaconda-ks.cfg etc2019-04-07 Public
Desktop initial-setup-ks.cfg pxelinux.0
Documents Music Templates
Downloads Pictures Videos
编写脚本/root/bin/nologin.sh和login.sh,实现禁止和充许普通用户登录系统
[root@centos7 /data]# vim nologin.sh
#!/bin/bash
[ -e /etc/nologin ] || touch /etc/nologin
echo "Normal User has forbidden to login"
[root@centos7 /data]# vim login.sh
#!/bin/bash
[ -e /etc/nologin ] && rm -f /etc/nologin
echo "Normal User can login"
编写脚本/root/bin/disk.sh,显示当前硬盘分区中空间利用率最大的值
[root@centos7 /data]# vim disk.sh
#!/bin/bash
df -h | grep ^/dev/sd | awk '{print $1,$5}' | sort -k2 -rn | head -1