1、总结vim命令行模式常见快捷方式,以及vim查找,替换的方法
命令模式转换至插入模式
i insert ,在光标所在处输入
I 在当前光标所在行的行首输入
a append 在当前光标所在处后面输入
A 在当前光标所在行的行尾输入
o 在当前光标所在行的下方打开一个新行
O 在当前光标所在行的上方打开一个新行
模式转换
插入模式 ESC 命令模式
命令模式 : 扩展命令模式
扩展命令模式 ESC ENTER 命令模式
关闭文件
扩展命令模式:
q 退出
q! 强制退出丢弃做出的修改
wq 保存退出
x 保存退出
命令模式:
ZZ 保存退出
ZQ 不保存退出
扩展命令模式
按:进入模式。创建一处于屏幕底部左侧的命令提示符:
w 写磁盘文件
wq 写入并退出
x 写入并退出
q 退出
q! 不存盘退出,更改全部丢弃
r FILENAME 读文件内容到当前文件中
w FILENAME 将当前文件内容写入另一个文件
!COMMAND 执行命令
r!COMMAND 读入命令的输出
命令模式光标跳转
字符间跳转:
h← l→ j↓ k↑ #COMMAND:跳转由#指定的个数的字符
单词间跳转:
w 下一个单词的词首
e 当前或下一单词的词尾
b 当前或上一单词的词首
#COMMAND:由#指定一次跳转的单词数目
当前页跳转:
H 页首 M 页中间 L 页尾
zt 将光标所在当前行移动到屏幕顶端
zz 将光标所在当前行移动到屏幕中间
zb 将光标所在当前行移动到屏幕底端
行首行尾跳转:
^ 跳转至行首的第一个非空白字符
0 跳转至行首
$ 跳转至行尾
行间移动:
#G、 扩展名了模式下:# 跳转至由#指定行
G 最后一行
1G,gg 第一行
句间移动:
) 下一句 (上一句
段落间移动 :
}下一段 {上一段
命令模式翻屏操作
ctrl+f 向文件尾部翻一屏
ctrl+b 向文件首部翻一屏
ctrl+d 向文件尾部翻半屏
ctrl+u 向文件首部翻半屏
命令模式操作
字符编辑:
x 删除光标处的字符
#x 删除光标处起始的#个字符
xp 交换光标所在处的字符及其后面字符的位置
~ 转换大小写
J 删除当前行后的换行符
替换命令:(r,replace)
r 替换光标所在处的字符
R 切换成REPLACE模式
删除命令:(d,delete)
d 删除命令,可结合光标跳转字符,实现范围删除
d$ 删除到行尾
d^ 删除到非空行首
d0 删除到行首
dw 删除一个单词
de 删除一个单词到当前单词尾
db 删除光标所在处的前一个单词
dd 删除光标所在处的行 #dd 多行删除
D 从当前光标位置删除至行尾,等同d$
复制命令:(y,yank):
y 复制,行为类似于d命令
y$ y0 y^ ye yw yb #COMMAND
yy 复制行 #yy复制多行
Y 复制整行
粘贴命令(p,paste):
p 缓冲区存的如果整行,则粘贴当前光标所在行下方;否则,则粘贴至当前光标所在处的的后面
P 缓冲区存的如果整行,则粘贴当前光标所在行上方;否则,则粘贴至当前光标所在处的的前面
改变命令(c,change):
c 修改后切换成插入模式,行为类似于d命令
c$ c^ c0 cb ce cw #COMMAND
cc 删除当前行并输入新内容,相当于S #cc
C 删除当前光标到行尾,并切换成插入模式
扩展命令模式:地址界定
# 具体第几行,例如2表示第2行
#,# 从左侧#表示起始行,到右侧#表示结尾行
#,+# 从左侧#表示的起始行,加上右侧#表示的行数 2,+3表示2到5行
. 当前行
$ 最后一行 .,$-1从当前行到倒数第二行
% 全文,相当于1,$
/pat1/,/pat2/ 从第一次被pat模式匹配到的行开始,直到第一次被pat2匹配到的行结束
#,/pat/ /pat/,$
后跟一个编辑命令
d y
w FILE将范围内的行另存为指定文件中
r FILE 在指定位置插入指定文件中的内容
撤销更改:
u 撤销最近的更改
#u 撤销之前多次更改
U 撤销光标落在这行后所有此行的更改
按ctrl -r 重做最后的“撤销”更改
. 重复前一个操作
n. 重复前一个操作n次
查找及替换方法
命令模式查找:
/PATTERN 从当前光标所在处向文件尾部查找
?PATTERN 从当前光标所在处向文件首部查找
n 与命令同方向 N 与命令反方向
扩展命令模式查找并替换:
s 格式: s/要查找的内容/替换为的内容/修饰符
要查找的内容:可使用模式
替换为的内容:不能使用模式,但可以使用\1,\2..等向后引用符号;还可以使用&引用前面查找时查找到的整个内容
修饰符 i 忽略大小写 g 全局替换;默认情况下每一行只替换第一次出现 gc 全局替换;替换前询问
查找替换中的分隔符可以替换为其他字符如:@、#
2、总结脚本中运算符、逻辑运算以及用法
算术运算:
bash中的算术运算:help let
+ - * / %取模(取余) **(乘方)
实现算术运算:
1 let var=算术表达式
2 var=$[算术表达式]
3 var=$((算术表达式))
4 var=$(expr arg1 arg2 arg3 ...)
5 declare -i var =数值
6 echo '算术表达式' |bc
乘法符号有些场景中需要转义,如*
bash有内建的随机数生成器:$RANDOM(0-32767)
echo $[$RANDOM%50]: 0-49之间随机数
赋值:
增强型赋值:
+= -= *= /= %=
let varOPERvalue
let count+=3
自加3后自赋值
自增自减:
let var+=1
let var++
let var-=1
let var--
逻辑运算:
true,false
1,0
与:
1与1=1
1与0=0
0与1=0
0与0=0
或:
1或1=1
1或0=1
0或1=1
0或0=0
非:!
!1=0 !true
!0=2 !false
短路与运算:
短路与:
第一个为0,结果必定为0
第一个为1,第二个必须要参与运算
短路或:
第一个为1,结果必定为1
第一个为0,第二个必须要参与运算
异或:^
异或的两个值相同为假0,不同为真1
同或:
相同为真1,不同为假0
条件性的执行操作符
根据退出状态而定,命令可以有条件的运行
&&代表条件性的AND THEN 短路与
CMD1为假,不运行CMD2 CMD1为真,运行CMD2
||代表条件性的OR ELSE 短路或
CMD1为真,不运行CMD2 CMD1为假,运行CMD2
例如:
grep -q no_such_user /etc/passwd\
|| echo 'No such user'
No such user
3、编写脚本/root/bin/backup.sh,可实现每日将/etc/目录备份到 /root/etcYYYY-mm-dd中
#!/bin/bash
echo "Backup star"
cp -av /etc/ /root/etc`date +%F`
echo "Backup finish"
4、编写脚本/root/bin/nologin.sh和login.sh,实现禁止和充许普通用户登录系统
nologin.sh
#!/bin/bash
echo "User nologin"
touch /etc/nologin
echo "finish"
login.sh
echo "User login"
rm -rf /etc/nologin
echo "finish"
5、编写脚本/root/bin/disk.sh,显示当前硬盘分区中空间利用率最大的值
disk.sh
#!/bin/bash
REDs="\033[1;31m"
#red strat
REDe="\033[0m"
#red end
echo -e "The max disk per is $REDs`df|grep "/dev/sd.*%"|tr -s ' ' %|cut -d% -f5|sort -rn|head -1`%$
REDe"