sed行编辑器与vim编辑器

一、sed行编辑器

  1、简介:sed的本身也是一个管道命令,可以分析标准输入,还可以将数据进行替换、删除、新增、选取特定行的功能

  2、工作原理:sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”( pattern space),接着用sed命令处理缓冲区中的内容 ,处理完成后,把缓冲区的内容送往屏幕。接着处理下一 行,这样不断重复,直到文件末尾。文件内容并没有改变 ,除非你使用重定向存储输出。Sed主要用来自动编辑一 个或多个文件,简化对文件的反复操作,编写转换程序。

1.png

  3、用法: sed [option]… 'script' inputfile…

常用选项:

    -n:不输出模式空间内容的自动打印

    -e: 多点编辑

    -f /PATH/TO/SCRIPT_FILE: 从指定文件中读取编辑脚本

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

    -i: 原处编辑

  4、地址定界:

  (1) 不给地址:对全文进行处理

  (2) 单地址:

        #: 指定的行

        /pattern/:被此处模式所能够匹配到的每一行

  (3) 地址范围:

        #,#

        #,+#

        /pat1/,/pat2/

        #,/pat1/

  (4) ~:步进

        1~2 奇数行

        2~2 偶数行

  5、编辑命令:

        d: 删除模式空间匹配的行

        p: 显示模式空间中的内容

        a \text:在行后面追加文本;支持使用\n实现多行追加

        i \text:在行前面插入文本;支持使用\n实现多行插入

        c \text:替换行为单行或多行文本

        w /path/to/somefile: 保存模式匹配的行至指定文件

        r /path/from/somefile:读取指定文件的文本至模式空 间中匹配到的行后

        =: 为模式空间中的行打印行号

        !:模式空间中匹配行取反处理

综合示例

2.png

  在这里我创建了一个有10行的文件,用sed结合删除命令与地址范围删除了2-5行,但是如果删除第2行到最后1行怎么办。

我们可以这样

3.png

那如何在文本中的行后追加或插入内容

追加

4.png

6、查找替换功能

  s///:查找替换,支持使用其它分隔符,s@@@,s###

  使用方法sed ‘s/要被替换的字符串/新的字符串/g’

  替换标记:

    g: 行内全局替换 (全局替换就是一整行所有的指定字符串都替换)

  如:

    在这里要注意的是我们替换的是222所以222为一组替换为111最后只剩下22并不能成为一组。

5.png

    p: 显示替换成功的行

    w /PATH/TO/SOMEFILE:将替换成功的行保存至文件中

7、高级编辑命令:

        h: 把模式空间中的内容覆盖至保持空间中

        H:把模式空间中的内容追加至保持空间中

        g: 从保持空间取出数据覆盖至模式空间

        G:从保持空间取出内容追加至模式空间

        x: 把模式空间中的内容与保持空间中的内容进行互换

        n: 读取匹配到的行的下一行覆盖至模式空间

        N:追加匹配到的行的下一行至模式空间

        d: 删除模式空间中的行

        D:删除当前模式空间开端至\n的内容(不在传至标准输 出),放弃之后的命令,但是对剩余模式空间重新执行sed

二、vim编辑器

1、简介

vim可以看做是vi的增强版,它大体上有三种模式,分别是命令模式、编辑模式、扩展命令模式。

  • 命令模式:直接以vim打开一个文件默认情况下进入的模式就是命令模式,在这个模式中可以用上下左右来移动光标,或者执行删除复制粘贴等命令。

  • 编辑模式:在这个模式下,就可以编辑文件的具体内容,但是需要按下一些特殊按键才可以进入这个模式。

  • 扩展命令模式:在最下面一行可以输入命令进行许多操作。

以上三个模式的关系如下图。

blob.png

示例,创建一个叫zzzz.txt的文件内容为ABC保存并退出

blob.png

创建文件进入命令模式按a进入编辑模式输入ABC按ESC退出编辑模式按:进入扩展命令模式输入wq(保存并退出)。

blob.png

  • 除了上面简单的几个小命令vim还有大量的命令与快捷键,那就让我们看一下下面的一张表把。

移动光标
h ← 光标向左移动一个字符
j ↓ 光标向下移动一个字符
k ↑ 光标向上移动一个字符
l → 光标向右移动一个字符
如果想多次移动只需要在前面加上数字如想要向左移动10个字符就在键盘上输入10在按h
Ctrl+f 屏幕向下移动一页(相当Pg Up)
Ctrl+b 屏幕向上移动一页(相当Pg Dn)
Ctrl+d 屏幕向下移动半页
Ctrl+u 屏幕向上移动半页
+ 光标移动到非空格符的下一行
光标移动到非空格符的上一行
N[space] 如10[space]光标回向后移动20个字符距离
0或[home] 移动到这一行的最前面字符处
$或[end] 移动到这一行的结尾处
H 移动到页首的第一个字符处
M 移动到页中的第一个字符处
L 移动到页尾的第一个字符处
G 移动到这个文件的最后一行
nG 移动到这个文件的第n行
gg 移动到这个文件的第一行
N[Enter] 向下移动n行

(:光标移动至所在处上一句
):光标移动至所在处下一句
{
}
{:光标移动至所在处上一段
}:光标移动至所在处下一段
查找与替换
/word 向下寻找名称为word的字符串
?word 向上寻找名称为word的字符串
n 重复前一个查找操作
N 反向进行前一个查找操作
删除、复制、粘贴
x,X x向后删除一个字符X向前删除一个字符
nx 连续向后删除n个字符
dd 删除光标所在的一行
ndd 光标所在行向下删除n行
d1G 删除光标所在第一行的数据
dG 删除光标处到最后一行的所有数据
d$ 删除光标处到该行的最后一个字符
d0 删除光标处到该行最前面的字符
yy 复制光标所在的一行
nyy 复制光标所在向下的n行
y1g 复制光标所在行到第一行的所有数据
yG 复制光标所在行到最后一行的所有数据
y0 复制光标所在的那个字符到该行行首的所有数据
y$ 复制光标所在的那个字符到该行行尾的所有数据
p.P p将以复制的数据在光标下一行粘贴,P将以复制的数据在光标上一行粘贴
J 将光标所在行与下一行的数据结合成同一行
c 重复删除多个数据
u 复原前一个操作
Ctrl+r 重做上一个操作
. 重复前一个操作
进入编辑模式
I,i I:从目前光标所在处插入I:从目前所在行的第一个非空格符进行插入。
A,a a:从目前光标所在的下一个字符插入A:从光标所在行的最后一个字付出开始插入
O,o o:从目前光标所在的下一行处插入新的一行O:在目前光标所在处的上一行插入新的一行
R,r r:指挥替换光标所在的那一个字符一次R:一直替换光标所在的文字,直到按下ESC键为止
ESC 退出编辑模式
保存、离开等命令
:w 将编辑的数据写入文件中
:w! 强制写入到文件中
:q 离开vim
:q! 强制离开不保存
:wq 保存并退出
ZZ 保存并退出
ZQ 不保存退出
:w[name] 将修改过的数据保存到另一个文件中(另存为)
:r[name] 在编辑的数据中,读入另一个文件
:n1,n2w[name] 将n1n2文件保存成name这个文件
:!command 暂时离开vim执行命令
:set nu 显示行号
:set nonu 取消行号
多文件编辑按键
:n 编辑下一个文件
:N 编辑上一个文件
:files 列出目前这个vim打开的所有文件

怎么样vim快捷键与小命令是不是超级多所以我们需要大量的练习来熟练他,下面我们就来里联系一个实例:

    1、复制etc下的passwd文件到testdir下改名为xx。

    blob.png

    2、使用vim命令打开它。

    blob.png

    3、在vim中设置一下行号。

    blob.png

    4、光标移动到第5行,向右移动10个字符。

    输入5按下g再输入10按下→

     blob.png

     5、将1到20行的nologin改为bash。

    输入: 在命令行模式下输入 1,15s\nologin\bash\

    blob.png

     6、修改完后复原。

      直接按U

    blob.png

     7、复制5-10行的内容粘贴到最底下。

    按5G光标会跳至到第5行再按下5y会显示复制5行按下G跳至文件尾按下p粘贴

    blob.png

     blob.png

     blob.png

     8、将文件另存为一个叫hhl的文件。

     输入:在命令行模式下输入w hhl

    blob.png

     9、在第一行新增一行,内容为,I am superman。

    先输入1G去到第一行,按下大写O新增一行且再插入模式下,输入I am superman

    blob.png

    blob.png

    10、保存并退出

    按下esc退出编辑模式按下:进入命令行模式输入wq按下回车。

    blob.png

vim是vi的加强版所以在vim上面有什么新添加的功能呢,以下列出。

2、vim新的特性

1、着色显示

  • 对系统规划的配置文件进行语法检验,对特殊内容进行着色。

  • 最下面一行的左边显示文件的属性。

  • 最下面右边表示光标所在的行与字符数。

如:

blob.png

2、块选择功能

在工作环境经中,我们有的时候可能需要提取出一个文件中的一列那块选择功能就能很好的帮助我们了。


块选择按键
v 字符选择,会将光标经过的地方选择
V 行选择,或将光标经过的行选择
Ctrl+v 块选择,用长方形的方式选择数据
y 将选择块复制
d 将选择的块删除

如果我们只需要该文件种bbbbbb的那一列该怎么办。

blob.png

将光标移到最上行第一个b上然后按下Ctrl+v,左下角出现块示意图,然后将光标移至最底部此时光标经过的区域会反白,意为被选择。

blob.png

这是进行复制粘贴就可以取出来了。

3、多窗口功能

假如有一个文件特别大,我们需要同事看文件的两个部分那么多窗口功能就可以帮助我们解决这个问题

多文件分割
Vim-o|-O 1 2 打开两个文件显示在两个窗口
o:水平分割O:垂直分割
Ctrl+w,j
Ctrl+w,↓
按住ctrl+w松开后按j或向下移动到向下的窗口
Ctrl+w,k
Ctrl+w+,↑
按住ctrl+w松开后按k或向上移动到向上的窗口
单文件分割
Ctrl+w,s 水平分割
Ctrl+w,v 垂直分割
Ctrl+w,q 取消相邻窗口
Ctrl+w,o 取消全部窗口
:wqall 退出


blob.png

4、定制vim的工作特性

配置文件:永久有效

    全局:/etc/vimrc

    个人:~/.vimrc

扩展模式:当前vim进程有效

(1) 行号

    显示:set number, 简写为set nu

    取消显示:set nonumber, 简写为set nonu

(2) 括号成对匹配

    匹配:set showmatch, 简写为set sm

    取消:set nosm

(3) 自动缩进 启用:set ai 禁用:set noai

(4) 高亮搜索 启用:set hlsearch 禁用:set nohlsearch

(5) 语法高亮 启用:syntax on 禁用:syntax off 

(6) 忽略字符的大小写 启用:set ic 不忽略:set noic

(7) 文件格式

    启用:fileformat=unix

    不忽略: fileformat=dos

(8) 设置文本宽度

    :set textwidth=65 (vim only)

    :set wrapmargin=15

    :help option-list

    :set or :set all

5、寄存器

  • 有26个命名寄存器和1个无命名寄存器,常存放不同的剪贴版内容,可以不同会话间共享。

  • 用a,b,…,z表示,用“寄存器表示,放在数字和命令之间 

  如:3"tyy 表示复制3行到t寄存器中 

     "tp 表示将t寄存器内容粘贴

  • 未指定,将使用无命名寄存器

  • 有10个数字寄存器,用0,1,…,9表示,0存放最近复 制内容,1存放最近删除内容。当新的文本变更和删除 时,1转存到2,2转存到3,以此类推。数字寄存器不能 在不同会话间共享。 vim的寄存器

6、编辑二进制文件

  •  以二进制方式打开文件 vim –b binaryfile

  •  扩展命令模式下,利用xxd命令转换为可读的十六进制 :%!xxd

  •  编辑二进制文件

  •  扩展命令模式下,利用xxd命令转换回二进制 :%!xxd –r

  •  保存退出


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