vim文本编辑器和sed用法汇总

1. Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进

和增加了很多特性。 VIM是纯粹的自由软件。


2. vim的三种工作模式:

1 编辑模式:也叫命令模式,可以执行个各种快捷键的命令

2 插入模式:在文本文件中可以直接输入内容。

3 末行模式:红帽官方叫扩展命令行模式vim内置命令行接口


 注:vim一开始打开文件的模式叫编辑模式,从编辑模式可以直接进入其它两种模式,插入:可以进入末行模式,输入相应的插入键可进入插入模式(i,I,o,O,a,A,s,S)插入模式按Esc键可以返回到编辑模式。


由编辑模式进入插入模式的字母含义:

i:在光标所在的前一个字母进入插入模式

I:在光标所在的行首进入插入模式

a:在光标所在的下一个字符进入插入模式

A:在光标所在的行尾进入插入模式

o:在光标所在行的下一行新开一行进入插入模式

O:在光标所在行的上一行进入插入模式

s:将光标所在的字符删除并进入插入模式

S 删除在光标所在的行,进入插入模式


3. vim的的使用:

1 打开文件:vim  选项  参数

         选项:

         +#:直接加数字,打开文件后直接让光标处于第#行。

         +/pattern:  打开第一次匹配到的地方。

        参数:

          要打开的文件名字

2)退出文件:在vim进入非编辑模式需要先退回到编辑模式,然后退出。具体操作:

         :q 退出,未保存

         :q! 强制退出,文件修改不需保存强制退出

         :wq保存退出

         : x 保存退出

         :wq! 强制保存退出

         :w  /directory_path  文件另存为某一路径

         ZZ 快捷键,在编辑模式可以使用,保存并退出

         ZQ:不保存退出


3)光标移动:

         光标移动除了方向键上下左右可以移动还可以使用快捷键:

         字符移动:

h

j

k

l

w下一个单词的词首

e 当前或者下一个单词的词尾

b 当前或前一个单词的词首

# #指定的单词数

当前页的跳转

H 页首

M页中间

L 页尾

^ 跳转至行首第一个非空字符

0(数字0)跳转至行首

$ 跳转至行尾

#G跳转至#指定的行

G 最后一行

gg1G 行首

()句子间移动

{} 段落间移动

Ctrl+f:向文件尾部翻一屏

Ctrl+b:向文件首部翻一屏

Ctrl+d:向文件尾部翻半屏

Ctrl+u:向文件尾部翻半屏


4)命令模式的操作:复制、粘贴、修改、删除

         命令模式都可以结合光标跳转命令结合使用

         yyank)复制:

1)         y#ey#w:分别在am上的am上执行两个命令黏贴在上下方,出现下面的四种情况:在字母a上执行结果都一样,在m,也就是词尾上,e就是当前单词或下一个单词的词尾,在词尾时,包括当前单词,和下一个单词,所以结果就是当前的m和下一个单词算一个,后面还有一个thankw则是下一个单词词首1.png

y2b:复制光标到当前单词词首和前一个单词

yy复制一行

y0 从光标出开始复制一直到行首,包括行首的空格也复制

y^表示复制时没有行首的空格

y^Y$在句子?处执行黏贴在下面

2.png

2)         删除dx

x表示把当前光标的字符删除,#x删除本行的#个字符

f上执行d2w后出现下面情况

3.png

同样可以执行d2e,d^,d$,d0,dd,db,效果类似于复制。

3)         paste粘贴:

p(小)如果缓冲区为整行,则粘贴至当前光标的下方,否则粘贴至光标后方

P(大)如果缓冲区为整行,则粘贴至当前光标的上方,否则粘贴至光标前方

4)         change修改c:删除字符进入插入模式,同样可以配合光标移动键使用类似于删除只是多了一步进入了插入模式,方便做插入模式

cc删除当前光标所在行,进入插入模式

c2w 删除两个单词至词尾进入插入模式

c2e 删除两个单词至词尾进入插入模式

c^ 删除至行首,不删除行首空格

c$ 删除至行尾进入插入模式

c0 删除至行首,包括空格,进入插入模式

5)撤销编辑:

                   u 撤销此前的操作

                   #u 撤销此前的#次操作

                   Ctrl+r 反撤销

                   shift+R 替换模式

                   xp可以实现光标与光标后的字符交换位置

6vim可视化模式:类似于windows中鼠标操作,可以结合使用dcy,对选中的字符,行,块可以进行删除,修改,复制等操作

                   v(小)光标走过的字符

                   shift+V(大)光标走过的行

                   ctrl+v 块选择

7)执行多次重复插入:

                   编辑模式输入 #i  ,进入插入模式后输入要批量插入的字符,结束后按Esc键即可完成批量输入。 “ .”” 可以执行上一次重复操作

如:编辑模式10i 之后输入jack

4.png

         ESC,完成十次输入

 5.png

8~可以在编辑模式实现大小写的切换,在光标选定的地方按~即可实现切换

6.png

 

也可以使用g+u/U切换整行大小写

9)末行模式扩展命令行模式:支持命令行模式,支持正则表达式支持搜索替换功能,结合xxd(小程序)可以编辑二进制文件,支持使用setvim实现定制化

1 内容定界:

         :# #

         :## #到第#

         :#+# 相对#偏移#

         : . 当前行

         : $ 最后一行

         : % 全文相当于1$

2 模式匹配:

         /part1/,/part2/ 第一次part1匹配到的到part2匹配到的为至

         #, /part2/ #行匹配到的到part2

         /part1/,$ part1到最后一行匹配到的内容

3 查找替换:

         最后行使用 / 或?进行对光标至文章尾,?对文章开头方向查找匹配查找,使用nN对搜索结果进行上下操作

7.png

替换参数:

         i:忽略大小写

         g:全局替换,否则默认只替换每一行的第一个

         c:替换之前进行询问,交互式的替换
使用s进行替换操作,结合定位操作实现精确替换

 

you进行全文替换,并替换为YOU_AND_ME,不进行交互的

8.png

9.png

使用正则表达式的替换:将jacky替换为rose。其中替换的分隔符/可以使用其它使用较少的符号替代如s@@@s###,以@或者#来替代均可

11.png

 

10 多文件模式:

 使用多文件模式可以同时打开多个文件进行同时编辑,或者可以比对两个版本的文件的差别:如:

vim –d  f1  f11

12.png

vim –o f1 f11 同时打开两个文件,以上下排版的方式分别显示两个文件,-O选项可以左右显示两个文件

13.png

 

在编辑两个文件的时候可以使用:

快捷键Ctrl+w ,方向键切换打开的多个文件,注意击键方式为同时按下ctrlw,松手后按方向键

或者使用命令

next 下一个编辑的文件

prev先前的文件

last最后一个文件

first第一个文件

wall 保存所有文件

wqall 保存并退出所有文件

也可以对一个文件进行多窗口分割:

ctrl+w s 水平分割

ctrl+w v 垂直分割

 

10)对窗口属性进行设置,可以对vim设置个性化特性:其配置文件为:

/etc/vimrc   ~/.vimrc前者是对全局进行设置,后者是对当前用户进行设置

具体常用属性:

         :set number set nu    显示行号 set nonu 不显示行号

         :set showmatch set sm 显示括号匹配,set nosm

         :set ai 自动缩进    set noai

         :set hlserach  设置语法高亮

         :syntax on 语法高亮 syntax off 关闭语法高亮

         :set ic 忽略字符的大小写 setnoic

         :set fileformate=unix/dos 设置文本文件类型,是unix类型还是dos类型

        

 

 

1. sed简介

         sedstream editor的简称,主要用来对文本的行进行处理,功能类似于awk,可以完美配合正则表达式,只是其更加简单,对文本的列处理功能较弱。处理文本时,sed将文件的一行存储在叫“模式空间”的一个缓冲区,处理完时,就默认将缓冲区的文本送至屏幕,接着处理下一行文本,直至将整个文件处理完。

2. sed用法与参数:

sed用法: sed 选项  ‘commond’ inputfile

 

选项:

          -e <script> -e指定的script来处理输入的文本,使用多个-e可以实现多点编辑

         -f <script文件>以选项指定的文件来处理输入的文件

         -n 仅显示script处理后的结果

-r 支持使用扩展正则表达式

-I 远处编辑

命令(分为三种命令,地址定界,编辑命令,替换标记命令):

     1)地址定界:

      不给出地址:对全文进行处理

      单个地址:#指定的行进行处理

                                /pattern/:被模式匹配的特定行进行处理

      地址范围:对给定地址范围的进行处理

                                 ## 对给定的特定行号之间的文本进行处理

                                 #+# 对给定的行号和其行号的偏移进行处理

                                 /pat1/,/pat2/ 对给定的两个模式之间的文本进行处理

                                 #,/pat1/ 对给定的行号和第一次模式匹配到的文本进行处理

     步进范围:所谓步进范围就是类似于奇数行或者偶数行

                                 1~2奇数行

                                 2~2 偶数行

     2 编辑命令:

              d 删除模式空间匹配的行

              p 打印模式空间的行

              a \text 在行后面追加文本

              i \text 在行后面插入文本

              c \text 替换单行或者多行文本

              w /path 保存模式匹配至path指定的文件

              r /path path指定的文件至模式空间

              = 为模式空间的行打印行号、

              !为模式空间的行做取反操作

     3 替换标记命令

              s/// 查找替换分隔符可以使用@#等不常用的字符

              g:行内全局替换

              p:显示替换成功的行

              w  /path 将替换成功的行保存至文件

              & :已匹配字符串标记

  附:sed元字符集:

^ 匹配行开始,如:/^sed/匹配所有以sed开头的行。

$ 匹配行结束,如:/sed$/匹配所有以sed结尾的行。

. 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。

* 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。

[] 匹配一个指定范围内的字符,如/[Ss]ed/匹配sed和Sed。

[^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。

\(..\) 匹配子串,保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。

& 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。

\< 匹配单词的开始,如:/\ 匹配单词的结束,如/love\>/匹配包含以love结尾的单词的行。

x\{m\} 重复字符x,m次,如:/0\{5\}/匹配包含5个0的行。

x\{m,\} 重复字符x,至少m次,如:/0\{5,\}/匹配至少有5个0的行。

x\{m,n\} 重复字符x,至少m次,不多于n次,如:/0\{5,10\}/匹配5~10个0的行。

3. sed用法示例:

(1) [root@centos7 testdir]# sed '2p' info.txt  //打印第二行,其他行默认打印
NOTE: If you are ever unsure about something you typed, press <ESC> to place
      you in Normal mode.  Then retype the command you wanted.
      you in Normal mode.  Then retype the command you wanted.

2

 [root@centos7 testdir]# sed -n '2p' info.txt  // 静默模式,仅打印第二行
   you in Normal mode.  Then retype the command you wanted.

3[root@centos7 testdir]# sed -n '1,4p' info.txt //打印1-4

NOTE: If you are ever unsure about something you typed, press <ESC> to place
      you in Normal mode.  Then retype the command you wanted.
 
NOTE: The cursor keys should also work.  But using hjkl you will be able to
(4) [root@centos7 testdir]# sed -n '1,/command/p' info.txt  //打印1到模式匹配到的行
NOTE: If you are ever unsure about something you typed, press <ESC> to place
      you in Normal mode.  Then retype the command you wanted.
(5)[root@centos7 testdir]# sed -n '/^$/=' info.txt  //显示空行的行号
3
[root@centos7 testdir]# sed -n -e '/command/{p;=}' -e '/NOTE/p'  info.txt //多点编辑,打印行号
NOTE: If you are ever unsure about something you typed, press <ESC> to place
      you in Normal mode.  Then retype the command you wanted.
2
NOTE: The cursor keys should also work.  But using hjkl you will be able to
(6)[root@centos7 testdir]# sed -n  '/command/i \hello_world'   info.txt
hello_world  //将匹配到的command之后行插入hello_world
(7)[root@centos7 testdir]# sed -e '/^$/d' -e '/^[[:space:]]\+$/d' info.txt  //删除空白行或包含空格tab的,
NOTE: If you are ever unsure about something you typed, press <ESC> to place
      you in Normal mode.  Then retype the command you wanted.
NOTE: The cursor keys should also work.  But using hjkl you will be able to
      move around much faster, once you get used to it.  Really!
(8)[root@centos7 testdir]# sed -n '1,3 s/you/&ANDME/p' info.txt  /指定范围内的替换
NOTE: If youANDME are ever unsure about something you typed, press <ESC> to place
      youANDME in Normal mode.  Then retype the command you wanted.

(9)[root@centos7 testdir]# sed -n  's@^[[:space:]]\+@@p' /etc/grub2.cfg //替换开头多个空格为空
load_env
set default="${next_entry}"
set next_entry=
save_env next_entry
set boot_once=true
…

 

(10)删除fs.txt以#开头,后面至少有一个空白字符的#和空格
[root@centos7 testdir]# head -n5 fs.txt
 
#
# /etc/fstab
# Created by anaconda on Thu Jul 21 11:45:45 2016
#
[root@centos7 testdir]# sed -n 's@#[ ]\+\(.*\)@\1@p' fs.txt
/etc/fstab
Created by anaconda on Thu Jul 21 11:45:45 2016
Accessible filesystems, by reference, are maintained under '/dev/disk'
See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
(11)求目录名:
[root@centos7 testdir]#echo "/etc/fst/sb/" | sed -r 's@(.*/)([^/]+/?)$@\1@p'
求基名:
[root@centos7 testdir]#echo "/etc/fst/sb/" | sed -r 's@(.*/)([^/]+/?)$@\2@p'

 

原创文章,作者:jack_cui,如若转载,请注明出处:http://www.178linux.com/32210

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-12 12:18

    文章内容充实,图文并貌,建议可以对各级标题进行加粗,展示,这样层次感会更明显呢。