一、先补充几个linux命令终端界面的快捷键
ctrl+a:移动光标到命令行首
ctrl+e:移动光标到命令行尾
ctrl+z:将进程放入后台,使用bg或者fg命令可以将其调出来
不过,由Ctrl + z转入后台运行的进程在当前用户退出后就会终止,所以用这个不如用nohup命令,或者&,
因为nohup命令的作用就是用户退出之后进程仍然继续运行,而现在许多脚本和命令都要求在root退出时仍然有效。
ctrl + c: 终止命令
ctrl + d: 退出shell,logout
ctrl + l: 清除屏幕内容,效果等同于clear
ctrl + y: 粘贴刚才所删除的字符
此命令比较强悍,删除的字符有可能是几个字符串,但极有可能是一行命令。
ctrl + r :在历史命令中查找 (这个非常好用,输入关键字就调出以前的命令了)
这个命令我强烈推荐,有时history比较多时,想找一个比较复杂的,直接在这里,shell会自动查找并调用,方便极了
ctrl+p:显示上一条命令,↑
ctrl+n: 显示下一条命令,↓
!! 重复执行最后一条命令
!$ 显示系统最近的一条参数
比如我先用cat /etc/sysconfig/network-scripts/ifconfig-eth0,然后我想用vim编辑。
一般的做法是先用↑ 显示最后一条命令,然后用Home移动到命令最前,删除cat,然后再输入vim命令。
其实完全可以用vim !$来代替。
ctrl+alt+F1~F7:切换终端
把当前进程送到後台处理。
二、vim快捷键和基本用法
i:向光标处插入
a:向光标处右移一个字符插入
o:向光标处下移一行插入
x:删除当前光标一个字符
X:删除当前光标左面一个字符
----------------------------
dd:删除当前光标所在的一行数据
yy:复制光标所在的行数据
p:在当前光标的下一行粘贴数据
P:在当前光标的上一行粘贴数据
---------------------------------
0:按零,移动到当前行的行首(当前屏幕范围内)
shift+$:移动到当前行的行尾(当前屏幕范围内)
ctrl+( :光标移动到当前段的行首
ctrl+) :光标移动到当前段的行尾
shift+h :光标移动到文档首端(当前屏幕范围内)
shift+g :光标移动到文档末端(整篇文档)
-------------------------------------
ctrl+v :进入列块可视化操作模式(这是vim的命令。root用户下的vi无此操作,普通用户下的vi有此操作)
进入该模式后,可以进行列块操作
如:注释很多列
首先ctrl+v
然后使用shift+g选择一列数据,或者用 "j" 或者用 "箭头"来选择需要的列
再后shift+i
在当前光标下敲入#
Esc
发现刚才选定的行都被注释掉了。
解除注释:
首先ctrl+v
然后shift+h选定刚才被注释掉的行
敲入x
发现注释全部解除了。
-------------------------------------------------------------
改变大小写:
大写变小写
ctrl+v,然后移动L键选中要改变大写为小写的字段,按小u键即可
小写变大写
ctrl+v,然后移动L键选中要改变小写为大写的字段,按大U键即可
--------------------------------------------------
ctrl+z:将当前vi打开文件放到后台
fg:将刚放入后台的文件调出来
--------------------------
vi开一个文件A后
:vs /path/另一个文件B---------------打开对比窗口
ctrl+w:切换两个窗口。
注:此操作是vim操作,root下vi不带vim,普通用户可以。
---------------------------------------------------------
/
:查找
回车后按n键查找下一个
--------
:set nu :打开序号
:1000 :将光标移到第1000行
-----------------------
用vi查看文件编码
vi tb1.txt
:set fileencoding
fileencoding=latin1
--------------------------------------------------
:%s#待替换的字符#替换后的字符#g
%为通配,替换所有。
\ :反斜杠-用来转义特殊字符。
eg:0 1/2\3^4567890
1、去掉空格
:s# ##g ---------空格可以不用转义
2、将/替换成|
:s#\/#|#g
3、将\替换成|
:s#\\#|#g
:g/^\s*$/d ----------删除只有空白的行 :s/\(\w\+\)\s\+\(\w\+\)/\2\t\1 ----------将 data1 data2 修改为 data2 data1 :%s/\(\w\+\), \(\w\+\)/\2 \1/ ----------将 Doe, John 修改为 John Doe :%s/\<id\>/\=line(".") ----------将各行的 id 字符串替换为行号 :%s/\(^\<\w\+\>\)/\=(line(".")-10) .".". submatch(1) 将每行开头的单词替换为(行号-10).单词的格式,如第11行的word替换成1. word :/OB/+1,$!sort ----------排序
-----------------------------------
more时用v进入vi
-------------------------------------------------------------------------------------------
元字符 说明
. 匹配任意一个字符[abc] 匹配方括号中的任意一个字符。可以使用-表示字符范围, 如[a-z0-9]匹配小写字母和阿拉伯数字。[^abc] 在方括号内开头使用^符号,表示匹配除方括号中字符之外的任意字符。\d 匹配阿拉伯数字,等同于[0-9]。\D 匹配阿拉伯数字之外的任意字符,等同于[^0-9]。\x 匹配十六进制数字,等同于[0-9A-Fa-f]。\X 匹配十六进制数字,等同于[^0-9A-Fa-f]。\w 匹配单词字母,等同于[0-9A-Za-z_]。\W 匹配单词字母之外的任意字符,等同于[^0-9A-Za-z_]。\t 匹配<TAB>字符。\s 匹配空白字符,等同于[ \t]。\S 匹配非空白字符,等同于[^ \t]。\a 所有的字母字符. 等同于[a-zA-Z]\l 小写字母 [a-z]\L 非小写字母 [^a-z]\u 大写字母 [A-Z]\U 非大写字母 [^A-Z] 表示数量的元字符元字符 说明* 匹配0-任意个\+ 匹配1-任意个\? 匹配0-1个\{n,m} 匹配n-m个\{n} 匹配n个\{n,} 匹配n-任意个\{,m} 匹配0-m个\_. 匹配包含换行在内的所有字符\{-} 表示前一个字符可出现零次或多次,但在整个正则表达式可以匹配成功的前提下,匹配的字符数越少越好\= 匹配一个可有可无的项\_s 匹配空格或断行\_[] 元字符 说明\* 匹配 * 字符。\. 匹配 . 字符。\/ 匹配 / 字符。\\ 匹配 \ 字符。\[ 匹配 [ 字符。 表示位置的符号元字符 说明$ 匹配行尾^ 匹配行首\< 匹配单词词首\> 匹配单词词尾 替换变量在正规表达式中使用 \( 和 \) 符号括起正规表达式,即可在后面使用\1、\2等变量来访问 \( 和 \) 中的内容。 懒惰模式\{-n,m} 与\{n,m}一样,尽可能少次数地重复\{-} 匹配它前面的项一次或0次, 尽可能地少\| "或"操作符\& 并列 函数式:s/替换字符串/\=函数式在函数式中可以使用 submatch(1)、submatch(2) 等来引用 \1、\2 等的内容,而submatch(0)可以引用匹配的整个内容。 与Perl正则表达式的区别 ?元字符的区别Vim语法 Perl语法 含义\+ + 1-任意个\? ? 0-1个\{n,m} {n,m} n-m个\(和\) (和) 分组 例如:1,去掉所有的行尾空格:“:%s/\s\+$//”。“%”表示在整个文件范围内进行替换,“\s”表示空白字符(空格和制表符),“\+”对前面的字符匹配一次或多次(越多越好),“___FCKpd___0rdquo;匹配行尾(使用“\___FCKpd___0rdquo;表示单纯的“___FCKpd___0rdquo;字符);被替换的内容为空;由于一行最多只需替换一次,不需要特殊标志。这个还是比较简单的。(/<Space><Tab>) 2,去掉所有的空白行:“:%s/\(\s*\n\)\+/\r/”。这回多了“\(”、“\)”、“\n”、“\r”和 “*”。“*”代表对前面的字符(此处为“\s”)匹配零次或多次(越多越好;使用“\*”表示单纯的“*”字符),“\n”代表换行符,“\r”代表回车符,“\(”和“\)”对表达式进行分组,使其被视作一个不可分割的整体。因此,这个表达式的完整意义是,把连续的换行符(包含换行符前面可能有的连续空白字符)替换成为一个单个的换行符。唯一很特殊的地方是,在模式中使用的是“\n”,而被替换的内容中却不能使用“\n”,而只能使用“\r”。原因是历史造成的,详情如果有兴趣的话可以查看“:help NL-used-for-Nul”。 3,去掉所有的“//”注释:“:%s!\ s*//.*!!”。首先可以注意到,这儿分隔符改用了“!”,原因是在模式或字符串部分使用了“/”字符,不换用其他分隔符的话就得在每次使用“/”字符本身时写成“\/”,上面的命令得写成“:%s/\s*\/\/.*//”,可读性较低。命令本身倒是相当简单,用过正则表达式的人估计都知道“.”匹配表示除换行符之外的任何字符吧。 4,去掉所有的“”注释:“:%s!\s*/\*\_.\{-}\*/\s*! !g”。这个略有点复杂了,用到了几个不太常用的 Vim 正则表达式特性。“\_.”匹配包含换行在内的所有字符;“\{-}”表示前一个字符可出现零次或多次,但在整个正则表达式可以匹配成功的前提下,匹配的字符数越少越好;标志“g”表示一行里可以匹配和替换多次。替换的结果是个空格的目的是保证像“intmain()”这样的表达式在替换之后仍然是合法的。