Linux知识心得10 vim剩余 三剑客

今日内容

vim 三种模式下的操作汇总与补充

# 1 命令模式:
‘‘‘
    a. 光标定位 
        hjkl  
        0 $ 
        gg G  
        3G      进入第三行 
        /string(n N 可以循环的)  快速定位到某一行  
                  
    b. 文本编辑(少量)
        y       复制  yy 3yy  ygg  yG (以行为单位)
        d       .删除 dd 3dd dgg  dG      (以行为单位) 
        p       粘贴
        x       删除光标所在的字符
        D       从光标处删除到行尾
        u       undo撤销
        ^r      redo重做
         r      可以用来修改一个字符
    
    c. 进入其它模式
        a       进入插入模式
        i       进入插入模式
        o       进入插入模式
        A       进入插入模式
        :       进入末行模式
        ^v  进入可视块模式
        R   进入替换模式

插入模式:
        ctrl^p  唯一补齐

末行模式:
    a. 保存退出
        :10 进入第10行   
        :w      保存   
        :q      退出    
        :wq     保存并退出      
        :w!     强制保存    
        :q!     不保存并退出       
        :wq!    强制保存退出
        :x      保存并退出
        
    b. 查找替换
        :范围 s/old/new/选项        
        :1,5 s/Note/yyy/                从1-5行的Note 替换为yyy   
        :5,$ s/Note/yyy/                $表示最后一行
        :1,$ s/to/xxx/g     =    :% s/to/xxx/g    %表示全文  g表示全局
        :4,9 s/^#//                         4-9行的以#开头的替换为空
        :% s#/dev/sda#/var/ccc#g
        :,8 s/to/xxx/           从当前行到第8行
        
    c. 读入文件/写文件
        :w
        :w /aaa.txt                         另存为/aaa.txt  
        :1,3 w /2.txt
        :1 w! /root/ccc.txt  如果目标文件已经存在则需要加!号
        :r /etc/hosts

    d. 设置环境     
        临时设置:       
        :set nu                            设置行号      
        :set ic                            不区分大小写
        :set ai                             自动缩进
        :set list                       注意$是每行的结束符号
        :set nonu                       取消设置行号     
        :set noic                       查找时考虑大小写                       

        永久的环境:
        /etc/vimrc                      影响所有系统用户
        ~/.vimrc                        影响某一个用户
        # vim ~/.vimrc             # 在家目录下新增一个文件,输入下述内容
        set ic                          不区分大小写
        set nu                          设置行号 

# vim -O /etc/hosts /etc/grub.conf      ctrl^w 按两次切换
# vimdiff grub.conf /etc/grub.conf      对比文件,ctrl^w 按两次切换       
# vim -p /etc/hosts /etc/grub.conf      shift^PgUp, shift^PgDn

‘‘‘

# 2 同时编辑多个文件
‘‘‘
#1、
vim -o 文件1 文件2   # 水平分隔
vim -O 文件1 文件2   # 垂直分隔
使用ctrl + ww切换

#2、
vim -p /etc/hosts /etc/grub.conf      
使用 ^PgUp, ^PgDn切换
‘‘‘

# 3 文件内容对比
‘‘‘
# 相同文件之间差异对比,通常用于对比修改前后的差异。
    
diff         #文件对比(No)
vimdiff      #以vim方式打开两个文件对比,高亮显示不同的内容

patch实验:
touch a.txt b.txt
[root@localhost ~]# echo 111 >> a.txt
[root@localhost ~]# echo 222 >> b.txt 
[root@localhost ~]# diff -u a.txt b.txt > patch.diff
[root@localhost ~]# patch a.txt patch.diff 
patching file a.txt
[root@localhost ~]# cat a.txt
222

‘‘‘

# 4 故障模拟
‘‘‘
(1)、模拟故障:编辑文件的时候断开连接即可(断网或断电) 重新连接服务器 再次进行编辑文件
(2)、故障报错:Found a swap file by the name ".vim.log.swp"   Swap file ".vim.log.swp" already exists
(3)、故障解决: 删除临时文件或者先恢复内容再删除   使用-r选项进行恢复。

注意:每次打开文件都会提示是否需要修复,可以把隐藏文件删除。

‘‘‘

# 5 vim中批量添加注释
‘‘‘
方法一 :块选择模式
批量注释:
Ctrl + v 进入块选择模式,然后移动光标选中你要注释的行,再按大写的 I 进入行首插入模式输入注释符号如 // 或 #,输入完毕之后,按两下 ESC,Vim 会自动将你选中的所有行首都加上注释,保存退出完成注释。
取消注释:
Ctrl + v 进入块选择模式,选中你要删除的行首的注释符号,注意 // 要选中两个,选好之后按 d 即可删除注释,ESC 保存退出。

方法二: 替换命令
批量注释。
使用下面命令在指定的行首添加注释。
使用名命令格式: :起始行号,结束行号s/^/注释符/g(注意冒号)。
取消注释:
使用名命令格式: :起始行号,结束行号s/^注释符//g(注意冒号)

‘‘‘

文本编辑之三剑客 -sed awk grep

# 2、文本处理三剑客
# sed
# 流式编辑器,主要擅长对文件的编辑操作,我们可以事先定制好编辑文件的指令,然后让sed自动完成对文件的整体编辑
‘‘‘
# 用法
sed 选项 ‘定位+命令‘ 文件路径

# 选项
-n 取消默认输出
-r 支持扩展正则元字符(由于尚未学习正则,所以此处暂作了解)
-i 立即编辑文件

# 定位
行定位:
    1定位到第一行
    1,3代表从第1行到第3行
    不写定位代表定位所有行
正则表达式定位:
    /egon/ 包含egon的行
    /^egon/ 以egon开头的行 
    /egon$/以egon结尾的行
数字+正则表达式定位
    "1,8p"代表打印1到8行,
    "1,/egon/p"则代表取从第1行到首次匹配到/egon/的行
    
# 命令
d    删除
p    打印
s///g    替换
注意:命令可以用;号连接多多条,如1d;3d;5d代表删除1,3,5行

=====》用法示例1:p(打印)与d(删除)
[root@ljl b]# cat c.txt 
111
222
333
[root@ljl b]# sed -r ‘3p‘ c.txt 
111
222
333
333
[root@ljl b]# sed -r ‘2d‘ c.txt 
111
333
[root@ljl b]# 

=====》用法示例2: s///g
[root@ljl b]# cat c.txt 
111simon1111
simon2222222
333simon3333
4444444simon
555555555555
6666666simon
simon7777777
8888simon888
[root@ljl b]# sed ‘s/simon/SIMON/g‘ c.txt 
111SIMON1111
SIMON2222222
333SIMON3333
4444444SIMON
555555555555
6666666SIMON
SIMON7777777
8888SIMON888
[root@ljl b]# 

======================================================================
^simon:simon开头的
simon$:simon结尾的
n 表示多少行 在s前
1,n 表示第一行到第n行 在s前
cat a.txt | sed ‘1,5d‘  # sed也支持管道

# sed命令是从磁盘空间提取到内存修改打印到屏幕的内容,每次不做保存。??
# 加上-i选项,直接修改文件,通常会在调试完毕确保没有问题后再加-i选项

=======================================================================

‘‘‘

# awk
# awk主要用于处理有格式(规律)的文本,例如/etc/passwd这种 	
‘‘‘
# 用法
awk 选项 ‘pattern{action}‘ 文件路径

# 选项
-F 指定行分隔符

# 工作流程
awk -F: ‘{print $1,$3}‘ /etc/passwd
1)awk会读取文件的一行内容然后赋值给$0
2)然后awk会以-F指定的分隔符将该行切分成n段,最多可以达到100段,
  第一段给$1,第二段给$2,依次次类推
3)print输出该行的第一段和第三段,逗号代表输出分隔符,默认与-F保持一致
4)重复步骤1,2,3直到文件内容读完

# 内置变量
$0 一整行内容
NR 记录号,等同于行号
NF 以-F分隔符分隔的段数

# pattern可以是:/正则/
    /正则/       # 该行内容匹配成功正则
    $1 ~ /正则/  # 第一段内容匹配成功正则
    $1 !~ /正则/  # 第一段内容没有匹配成功正则
比较运算:
	NR >= 3 && NR <=5  # 3到5行
	NR <= 3 || NR >=5  # 小于等于3行或者大于等于5行
    $1 == "root"       # 第一段内容等于root

# action可以是
print $1,$3

用法示例1:
[root@ljl ~]# cat /a/pwd.txt 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@ljl ~]# awk -F: ‘/^root/{print $1,$3}‘ /a/pwd.txt 
root 0
[root@ljl ~]# awk -F: ‘$1 ~ /^d/{print $1,$3}‘ /a/pwd.txt 
daemon 2               #第一行到最后行以d开头的
[root@ljl ~]# awk -F: ‘$1 !~ /^d/{print $1,$3}‘ /a/pwd.txt 
root 0                 #第一行到最后行不以d开头的
bin 1
adm 3
[root@ljl ~]# awk -F: ‘$1 == "adm"{print $0}‘ /a/pwd.txt   # 开头是“adm”的
adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@ljl ~]# awk -F: ‘NR>=3{print $1}‘ /a/pwd.txt  # 行数≥3
daemon
adm
[root@ljl ~]# cat /a/pwd.txt | awk -F: ‘{print $2}‘  # awk也支持管道
x
x
x
x
[root@ljl ~]# 

‘‘‘

# grep
# grep擅长过滤内容

‘‘‘
# 用法
grep 选项 ‘正则‘ 文件路径

# 选项
-n, --line-number           在过滤出的每一行前面加上它在文件中的相对行号
-i, --ignore-case           忽略大小写
--color                     颜色
-l, --files-with-matches    如果匹配成功,则只将文件名打印出来,失败则不打印
                            通常-rl一起用,grep -rl ‘root‘ /etc 
-R, -r, --recursive         递归

# 示例
[root@localhost ~]# grep ‘^root‘ /etc/passwd   # 以root开头的
root:x:0:0:root:/root:/bin/bash
                        
[root@localhost ~]# grep -n ‘bash$‘ /etc/passwd  # 以bash结尾的
1:root:x:0:0:root:/root:/bin/bash
44:egon:x:1000:1000:egon:/home/egon:/bin/bash
                            
[root@localhost ~]# grep -rl ‘root‘ /etc   # /etc目录下内容含有“root”的文件夹/目录名称

# grep也支持管道,我们可以发现三剑客命令都支持管道
[root@localhost ~]# ps aux |grep ssh
root        968  0.0  0.2 112908  4312 ?        Ss   14:05   0:00 /usr/sbin/sshd -D
root       1305  0.0  0.3 163604  6096 ?        Ss   14:05   0:00 sshd: root@pts/0
root       1406  0.0  0.3 163600  6240 ?        Ss   14:05   0:00 sshd: root@pts/1
root       2308  0.0  0.0 112724   984 pts/1    R+   15:30   0:00 grep --color=auto ssh
[root@localhost ~]# ps aux |grep [s]sh
root        968  0.0  0.2 112908  4312 ?        Ss   14:05   0:00 /usr/sbin/sshd -D
root       1305  0.0  0.3 163604  6096 ?        Ss   14:05   0:00 sshd: root@pts/0
root       1406  0.0  0.3 163600  6240 ?        Ss   14:05   0:00 sshd: root@pts/1

[root@ljl ~]# ps aux | grep bash
root       7113  0.0  0.0 115440  1988 tty1     Ss+  18:20   0:00 -bash
root       7139  0.0  0.1 115444  2124 pts/0    Ss   18:21   0:00 -bash
root       7286  0.0  0.0 115444  1984 pts/1    Ss   19:10   0:00 -bash
simon      7304  0.0  0.1 115444  2068 pts/1    S+   19:10   0:00 bash
root       7323  0.0  0.0 112708   976 pts/0    S+   19:11   0:00 grep --color=auto bash
[root@ljl ~]# kill -9 7304   # 类似Python中 taskkill /F /PID
[root@ljl ~]# 

‘‘‘

?
?

# 明日预告
‘‘‘
1、文件查找
2、文件的上传下载
3、输出与重定向
4、字符处理命令
5、打包压缩
6、文件系统(操作系统某个组件)
    软连接-》快捷方式
    硬链接
    
‘‘‘

?

Linux知识心得10 vim剩余 三剑客

上一篇:Windows下安装WebLogic


下一篇:在VS2005编程中,有的时候DataGridView数据源有几个表的联合查询,而系统又有限制为一个表,怎么办?