vim文本编辑
1.less
- less test.txt,分屏打开内容,空格往后打开,b向上返回。
2.head
- head test.txt,默认显示文本开头10行;
- head -3 test.txt,显示文本开头3行;
3.tail
- tail test.txt,默认打开文本最后10行;
- tail -f test.txt,流式显示;
- tail -3 test.txt,显示txt最后3行;
4. 管道 |
head -3 test.txt | tail -1 ,只显示文本的第三行;
- 其中 | 符号在linux中称作为管道,是将 | 前边命令输出结果作为后边输入;
- echo “/” | ls -l 预期结果是显示根目录下的内容列表,但结果是显示了当前目录的内容列表,如下所示:
[root@node01 ~]# echo "/" | ls -l
total 28
-rw-r--r--. 1 root root 0 Sep 6 06:27 a
-rw-------. 1 root root 900 Aug 20 02:08 anaconda-ks.cfg
lrwxrwxrwx. 1 root root 1 Sep 6 06:14 c -> a
-rw-r--r--. 1 root root 8815 Aug 20 02:08 install.log
-rw-r--r--. 1 root root 3384 Aug 20 02:07 install.log.syslog
-rw-r--r--. 1 root root 1796 Sep 6 06:27 profile
drwxr-xr-x. 5 root root 4096 Sep 6 05:52 x
5. xargs
- 如果要显示根目录内容,需要加上 xargs,这个参数的作用是将管道前边的输出结果,放到它后边命令的最后执行,也就是ls -l
/,如下所示:
[root@node01 ~]# echo "/" | xargs ls -l
total 90
dr-xr-xr-x. 2 root root 4096 Aug 20 02:06 bin
dr-xr-xr-x. 5 root root 1024 Aug 20 02:08 boot
drwxr-xr-x. 18 root root 3680 Sep 8 20:00 dev
drwxr-xr-x. 61 root root 4096 Sep 8 20:00 etc
drwxr-xr-x. 3 root root 4096 Sep 6 05:46 home
dr-xr-xr-x. 8 root root 4096 Aug 20 02:06 lib
dr-xr-xr-x. 9 root root 12288 Aug 20 02:07 lib64
drwx------. 2 root root 16384 Aug 20 02:02 lost+found
drwxr-xr-x. 2 root root 4096 Sep 23 2011 media
drwxr-xr-x. 2 root root 4096 Sep 23 2011 mnt
drwxr-xr-x. 2 root root 4096 Sep 23 2011 opt
dr-xr-xr-x. 85 root root 0 Sep 8 20:00 proc
dr-xr-x---. 3 root root 4096 Sep 6 06:27 root
dr-xr-xr-x. 2 root root 12288 Aug 20 02:07 sbin
drwxr-xr-x. 7 root root 0 Sep 8 20:00 selinux
drwxr-xr-x. 2 root root 4096 Sep 23 2011 srv
drwxr-xr-x. 13 root root 0 Sep 8 20:00 sys
drwxrwxrwt. 3 root root 4096 Sep 8 20:00 tmp
drwxr-xr-x. 13 root root 4096 Aug 20 02:04 usr
drwxr-xr-x. 17 root root 4096 Aug 20 02:04 var
6. tee
- 可以将输入流变成两个支线去输出,一个是在标准输出里打印,另一个是可以输出到文本中,这样既能在控制台显示,又能输出到文本中,例如:
[root@node01 ~]# ls -l / | tee abc.txt
total 90
dr-xr-xr-x. 2 root root 4096 Aug 20 02:06 bin
dr-xr-xr-x. 5 root root 1024 Aug 20 02:08 boot
drwxr-xr-x. 18 root root 3680 Sep 8 20:00 dev
drwxr-xr-x. 61 root root 4096 Sep 8 20:00 etc
drwxr-xr-x. 3 root root 4096 Sep 6 05:46 home
dr-xr-xr-x. 8 root root 4096 Aug 20 02:06 lib
dr-xr-xr-x. 9 root root 12288 Aug 20 02:07 lib64
drwx------. 2 root root 16384 Aug 20 02:02 lost+found
drwxr-xr-x. 2 root root 4096 Sep 23 2011 media
drwxr-xr-x. 2 root root 4096 Sep 23 2011 mnt
drwxr-xr-x. 2 root root 4096 Sep 23 2011 opt
dr-xr-xr-x. 85 root root 0 Sep 8 20:00 proc
dr-xr-x---. 3 root root 4096 Sep 6 06:27 root
dr-xr-xr-x. 2 root root 12288 Aug 20 02:07 sbin
drwxr-xr-x. 7 root root 0 Sep 8 20:00 selinux
drwxr-xr-x. 2 root root 4096 Sep 23 2011 srv
drwxr-xr-x. 13 root root 0 Sep 8 20:00 sys
drwxrwxrwt. 3 root root 4096 Sep 8 20:11 tmp
drwxr-xr-x. 13 root root 4096 Aug 20 02:04 usr
drwxr-xr-x. 17 root root 4096 Aug 20 02:04 var
- 查看一下文本内容:
[root@node01 ~]# cat abc.txt
total 90
dr-xr-xr-x. 2 root root 4096 Aug 20 02:06 bin
dr-xr-xr-x. 5 root root 1024 Aug 20 02:08 boot
drwxr-xr-x. 18 root root 3680 Sep 8 20:00 dev
drwxr-xr-x. 61 root root 4096 Sep 8 20:00 etc
drwxr-xr-x. 3 root root 4096 Sep 6 05:46 home
dr-xr-xr-x. 8 root root 4096 Aug 20 02:06 lib
dr-xr-xr-x. 9 root root 12288 Aug 20 02:07 lib64
drwx------. 2 root root 16384 Aug 20 02:02 lost+found
drwxr-xr-x. 2 root root 4096 Sep 23 2011 media
drwxr-xr-x. 2 root root 4096 Sep 23 2011 mnt
drwxr-xr-x. 2 root root 4096 Sep 23 2011 opt
dr-xr-xr-x. 85 root root 0 Sep 8 20:00 proc
dr-xr-x---. 3 root root 4096 Sep 6 06:27 root
dr-xr-xr-x. 2 root root 12288 Aug 20 02:07 sbin
drwxr-xr-x. 7 root root 0 Sep 8 20:00 selinux
drwxr-xr-x. 2 root root 4096 Sep 23 2011 srv
drwxr-xr-x. 13 root root 0 Sep 8 20:00 sys
drwxrwxrwt. 3 root root 4096 Sep 8 20:11 tmp
drwxr-xr-x. 13 root root 4096 Aug 20 02:04 usr
drwxr-xr-x. 17 root root 4096 Aug 20 02:04 var
7. vi(vim)
- vim是vi的升级版,vim +n profile 打开文件并定位到n行,输入:set nu显示行号;
- vim +: 打开文件并定位到最后一行,或者vim直接打开文件,输入G自动到最后一行;
- vim +/关键字,打开文件并定位到关键字位置;
- 编辑模式保存退出,除了按ESC-输入:wq操作之外,还可以直接ESC,按ZZ进行保存退出;
8. vi(vim)光标移动
- vim profile打开文件,输入i进入编辑模式,i在当前光标前边输入字母,a在当前光标后边输入字母;
- vim profile打开文件,输入o(小写)在当前光标下方新建一行,并转为输入模式;
- vim profile打开文件,输入O(大写)在当前光标所在行的上方,新建一行,并转为输入模式;
- vim profile打开文件,输入I定位在当前光标所在行的行首,并转为输入模式;
- vim profile打开文件,输入A定位在当前光标所在行的行尾,并转为输入模式;
- 编辑模式下,h(左)j(下)k(上)l(右),使用这几个字母等同于上下左右键;
- 编辑模式下,w 移至下一个单词的词首,可以单词为单位一直下一个;
- 编辑模式下,e 跳至当前或前一个单词的词尾;
- 编辑模式下,b 跳至当前或前一个单词的词首;
- 行内:编辑模式下,0 绝对行首;^ 行首的第一个非空白字符;$ 绝对行尾;
- 行间:编辑模式下,G 文章末尾;3G 第3行;gg 文章开头;
9. vi(vim)翻屏
- 编辑模式下,ctrl+f 往下翻屏,ctr+b 往上翻屏;
10. vi(vim)删除&替换
- x 删除光标位置的字符;
- 3x 删除光标开始3个字符;
- r 替换光标位置字符;
- dd 删除光标所在行,3dd即删除光标以下的3行内容;
- dw 删除光标所在的整个单词,3dw即删除光标所在之后的3个单词;
- dG 删除光标所在行以下,到最后一行,G表示最后一行;
- p 粘贴光标所在行的下一行(粘贴dd的内容即为剪切),P(大写)粘贴到光标所在行的上一行;
- 还可以使用末行模式删除,例如:
:6,$d
其中6表示开始行号,$表示最后一行,d表示删除,整个命令表示从第6行开始到最后一行全部删除;
再例如:
:.,$d
其中 . 表示当前光标所在位置;
如果想从第6行删除到最后,保留最后两行,可以这样操作:
:6,$-2d
同样,可以使用末行模式进行具体行的拷贝,例如:
:.,+5y
从光标所在行开始,向下拷贝5行,然后可以在编辑模式下使用p命令进行拷贝;
11. vi(vim)撤销&重做
- u 撤销;
- ctrl+r 重做撤销的操作;
- . 重复上一步的操作;
12. vi(vim)set设置
- set nu 显示行号;
- set nonu 隐藏行号;
- set readonly 设置当前文本为只读,即使修改了也不能保存;
13. vi(vim)查找
- /aaa 查找关键字aaa,n向下查找下一个,N向上查找下一个;
- :?aaa 末行模式查找关键字aaa,和直接/不同的是,它默认是向上查找;
14. vi(vim)查找并替换s
- 从第1行到最后一行,将aaa替换为bbb,如下所示:
:1,$s/aaa/bbb/
注意:以上只是将每一行第一个出现的aaa给替换成了bbb,如果同一行有多个aaa将不被替换。如果整行都要替换,需加g,i为忽略大小写,如下所示:
:1,$s/aaa/bbb/gi
- 如果将全文中的某个关键字替换,可以使用%,如下所示:
:%s/aaa/bbb/gi
15. vi(vim)编辑模式中执行命令!
- 如果在文本编辑模式下,执行命令,可以使用!+指令,如下所示:
:!ls -l /
一般在配置文件中,可能会遇到某个文件名忘记了,那么就可使用执行命令模式,去查看文件名然后再回车,继续文件编辑模式,非常方便。
正则表达式
1. 首先看下grep的用法
- 查看包含”after”的行,如下所示:
[root@node01 ~]# grep "after" profile
if [ "$2" = "after" ] ; then
pathmunge /usr/local/sbin after
pathmunge /usr/sbin after
pathmunge /sbin after
- 查看不包含所定义关键字的行,加上-v:
[root@node01 ~]# grep -v "after" profile
2. 匹配操作符
- \ 转义字符;
- . 匹配任意单个字符;
- [12389],[^12],[a-k] 字符序列单字符占位,匹配[]中任意字符;
- ^ 匹配行首;
- $ 匹配行尾;
- \<,> 单词首尾边界;
- | 连接操作符;
- (,) 选择操作符;
- \n 反向引用;
- [^0-9] 匹配任意不在0-9范围内的字符串;
3. 重复操作符
注意:其中斜体的为扩展正则表达式,使用时需要转义 \?,+,{,|,(
- ? 匹配前边子表达式0到1次;
- * 匹配0到多次;
- + 匹配1到多次;
- {n} 匹配n次;
- {n,} 匹配n到多次;
- {n,m} 匹配n到m次;
- .* 匹配任意单个或多个字符;
- 搜索含有某个单词的行记录,如下所示:
grep "\<aaa\>" profile