文本处理工具sed的使用以及Vim的使用技巧详解

一、什么是sed
    sed的英文全称是Stream EDitor,叫行编辑器。
    sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。 Sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等。
二、sed的使用
    sed工具
    用法:
    sed [option]... 'script' inputfile...
 常用选项:
    -n:不输出模式空间内容的自动打印
    -e: 多点编辑
    -f /PATH/TO/SCRIPT_FILE: 从指定文件中读取编辑脚本
    -r: 支持使用扩展正则表达式
    -i: 原处编辑
 script:
    '地址命令'
地址定界:
    (1) 不给地址:对全文进行处理
    (2) 单地址:
        #: 指定的行
        /pattern/:被此处模式所能够匹配到的每一行
    (3) 地址范围:
#,#
#,+#
/pat1/,/pat2/
#,/pat1/
    (4) ~:步进
        1~2 奇数行
        2~2 偶数行
[root@wzc ~]# sed -n '2p' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
#打印某行,单引号内数字2,表示第几行
[root@wzc ~]# sed -n '1,$p' /etc/passwd
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
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
                  .....
#把/etc/passwd所有行打印出来
[root@wzc ~]# sed -n '1,3p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
#也可以指定一个范围
[root@wzc ~]# sed -n '/root/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
#打印包含某个字符串的行
[root@wzc date]# sed -ne '2p' -e '/root/p' passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
#-e选项可以实现多点编辑
编辑命令:
    d: 删除模式空间匹配的行
    p: 显示模式空间中的内容
    a \text:在行后面追加文本;支持使用\n实现多行追加
    i \text:在行前面插入文本;支持使用\n实现多行插入
    c \text:替换行为单行或多行文本
    w /path/to/somefile: 保存模式匹配的行至指定文件
    r /path/from/somefile:读取指定文件的文本至模式空
    间中匹配到的行后
    =: 为模式空间中的行打印行号
    !:模式空间中匹配行取反处
[root@wzc date]# cat -n passwd | sed '3d' 
     1  root:x:0:0:root:/root:/bin/bash
     2  bin:x:1:1:bin:/bin:/sbin/nologin
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
#-d选项删除行,显示删除行以外的行
[root@wzc date]# cat -n passwd |sed '1,3d'
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     6  sync:x:5:0:sync:/sbin:/bin/sync
     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8  halt:x:7:0:halt:/sbin:/sbin/halt
     9  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
#-d选项还可以删除指定范围的行
cat -n passwd |grep 'root'|sed '/root/d'
#删除指定的字符串
s///:查找替换,支持使用其它分隔符, s@@@, s###
    替换标记:
        g: 行内全局替换
p: 显示替换成功的行
w /PATH/TO/SOMEFILE:将替换成功的行保存至文件中
[root@wzc ~]# cat test 
root root root
root    root
root root 
[root@wzc ~]# sed 's/root/tot/' test 
tot root root
tot     root
tot root 
[root@wzc ~]# sed 's/root/tot/g' test 
tot tot tot
tot     tot
tot tot 
#‘s’有替换和删除的意思,加‘g’选项是文本行中全局替换,如果不加‘g’选项只替换每行的第一个字符
[root@wzc date]# cat stu.txt 
ID      Name    PHP     Linux   Mysql   Average
1       cangls  88      90      95      91
2       boduo   87      95      90      90.7
3       longze  85      88      87      86.7
[root@wzc date]# sed '3s/95/100/g' stu.txt 
ID      Name    PHP     Linux   Mysql   Average
1       cangls  88      90      95      91
2       boduo   87      100     90      90.7
3       longze  85      88      87      86.7
#把第三行Linux成绩95替换成100,文件内容实际上Linux成绩还是95

[root@wzc date]# sed -i '3s/95/100/g' stu.txt 
[root@wzc date]# cat stu.txt 
ID      Name    PHP     Linux   Mysql   Average
1       cangls  88      90      95      91
2       boduo   87      100     90      90.7
3       longze  85      88      87      86.7
#-i选项是把数据直接写入文件
[root@wzc date]# cat stu.txt 
ID      Name    PHP     Linux   Mysql   Average
1       cangls  88      90      95      91
2       boduo   87      100     90      90.7
3       longze  85      88      87      86.7
[root@wzc date]# sed -e 's/cangls//g' -e 's/boduo//g' stu.txt 
ID      Name    PHP     Linux   Mysql   Average
1               88      90      95      91
2               87      100     90      90.7
3       longze  85      88      87      86.7
#-e前面已经讲过是可以实现多点编辑,同时把‘cangls’和‘boduo’替换为空

Vim
什么是Vim
    Vim是一个功能强大的全屏幕文本编辑器,是Linux/Unix上最常用的文本编辑器,它的作用是建立、编辑、显示文本文件。
    Vim的三种模式:命令模式、插入模式、扩展模式。
模式转换
    命令模式 --> 插入模式
    i: insert, 在光标所在处输入
    I:在当前光标所在行的行首输入
    a: append, 在光标所在处后面输入
    A:在当前光标所在行的行尾输入
    o: 在当前光标所在行的下方打开一个新行
    O:在当前光标所在行的上方打开一个新行
插入模式 ----> 命令模式
    ESC
命令模式 ----> 扩展模式
    :
扩展模式 ----> 命令模式
    ESC
锁定和解锁:CTRL+s,Ctrl+q
关闭文件
扩展模式:
    :q 退出
    :q! 强制退出,丢弃做出的修改
    :wq 保存退出
    :x 保存退出
命令模式
    ZZ: 保存退出
    ZQ:不保存退出

Vim总结(表格)

命令模式下移动光标
h或向左方向键 光标向左移动一个字符
l或向右方向键 光标向右移动一个字符
j或向下方向键 光标向下移动一个字符
k或向上方向键 光标向上移动一个字符
Ctrl+f或者page UP键 屏幕向前移动一页
Ctrl+b或者page DOWN键 屏幕向后移动一页
Ctrl+d 屏幕向前移动半页
Ctrl+u 屏幕向后移动半页
+ 光标移动到非空格符的下一列
光标移动到非空格符的上一列
N空格(n是数字) 按下数字n然后按空格,则光标向右移动n个字符,如果该行字符数小于n,,则光标继续从下行开始向右移动,一直到n
数字0或Shift+6 移动到本行行首
Shift+4或$ 移动到本行行尾
H 光标移动到当前屏幕的最顶行
M 光标移动到当前屏幕的中央那一行
L 光标移动到当前屏幕的最底行
G 光标移动到文本的最末行
nG(n是数字) 移动到该文本的最n行
gg 移动到该文本的首行
n回车(n是数字) 光标向下移动n行
$ 移至行尾
0 移至行首

命令模式下查找与替换
/word 向光标之后寻找一个字符串名为word的字符串,当找到第一个word后,按‘n’继续搜后一个
?word 向光标之后寻找一个字符串名为word的字符串,当找到第一个word后,按‘n’继续搜前一个
:n1,n2s/word1/word2/g 在n1和n2行间查找word1这个字符串并替换成word2,也可以把‘/’换成‘#’或‘@’
:1,$s/word1/word2/g 从第一行到最末行,查找word1并替换成word2
:1,$s/word1/word2/gc 加上c的作用是,在替换前需要用户确认

命令模式下删除、复制、粘贴
x,X X删除光标所在处字符,X为向前删除一个字符
nx(n位数字) 向后删除n个字符
dd 删除光标所在的那一行
ndd(n位数字) 删除光标所在行的向下n行
d1G 删除光标所在的第一行所有数据
dG 删除光标所在行到末行的所有数据
yy 复制光标所在的那行
nyy 复制从光标所在行起向下n行
p,P p复制的数据从光标下一行粘贴,P则从光标上一行粘贴
y1G 复制光标所在行到第一行的所有数据
yG 复制光标所在行到末行的所有数据
J 将光标所在行与下一行的数据结合成同一行
u 还原过去的操作
D 删除光标所在处到行尾内容
r 取代光标所在处字符
R 从光标所在处开始替换字符,按ESC结束

进入编辑模式
i 在当前字符前插入字符
I 在当前行行首插入字符
a 在当前字符后插入字符
A 在当前行行尾插入字符
o 在当前行下插入新的一行
O 在当前行上插入新在当前行下插入新的一行的一行
r 替换光标所在的字符,只替换一次
R 一直替换光标所在的字符,一直到按下ESC

扩展模式
:w 将编辑过的文本保
:w! 若文本属性为只读时,强制保存
:q 退出Vim
:q! 不管编辑或未编辑都不保存退出
:wq 保存,退出
:e! 将文档还原成最原始状态
ZZ 若文档没有改动,则不存储离开,若文档改动过,则存储后离开,等同于:wq
:w  [filename] 编辑都的文档另存为[filename]
:r  [filename] 在当前光标所在行的下面读入filename文档的内容
:set nu 在每行的行首显示行号
:set nonu 取消行号
n1,n2 w [filename] 将n1到n2的内容另存为filename这个文档
:! command 暂时离开Vim运行某个Linux命令。例如:! ls /home暂时列出/home目录下的文件1,然后会提示按回车回到Vim

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

(0)
上一篇 2016-08-11 09:37
下一篇 2016-08-11 09:37

相关推荐

  • Linux Zabbix监控

                           Linux Zabbix监控 zabbix监控系统:    zabbix是基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zab…

    Linux干货 2016-11-19
  • httpd功能配置之路径别名

       httpd的路径别名功能可以使用资源的访问不再依赖于站点的根目录,可以指定任意目录来设置资源的访问路径。    默认站点的根目录是/var/www/html,如下图所示。    下面来使用路径的别名来访问资源:    1、打开httpd服务的配置文件  &nbsp…

    Linux干货 2016-03-11
  • shell 脚本之数组 和 yum 【下】

    shell 脚本之数组 和 yum 【下】 数组   变量:存储单个元素的内存空间   数组:存储多个元素的连续的内存空间,相当于多个变量的 集合。   数组名和索引        索引:编号从0开始,属于数值索引        注意:索引可支…

    Linux干货 2016-08-24
  • MySQL入门命令知识

    简单介绍下吧,MySQL应用的场景大多数互联网公司第一次卖身是卖个了sun好像是10亿,第二次是连同sun自己,以74亿美元被卖给了Orecle~后面MySQL原作者站出来说,MySQL会存在闭源风险,整了个MariaDB~我也是醉了,也不考虑下我们的痛苦!下面简要介绍下MySQL的入门知识。    一、MySQL有三种定义语言 &nbs…

    2016-12-05
  • bash特性之基础

    bash shell 命令历史history 环境变量: HISTSIZE :命令历史记录的条数 HISTFILE :~/.bash_history HISTFILESIZE: 显示环境变量:echo    环境变量的修改:export  history history [-c] [-d&…

    Linux干货 2016-11-22
  • Linux进程管理-初级

    Linux进程管理-初级 背景: 在学习完Linux进程管理后,发现这一块的知识点比较多,很多都是自己以前没有接触过的,而且这部分知识对今后的工作有很大帮助,在这里做个学习的总结,供以后复习。 进程介绍: 什么是进程 进程(Process):运行中的程序的一个副本,是被载入内存的一个指令集合,进程有进程ID(Process ID,PID),用来标记每个进程,…

    2017-08-26

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-12 10:07

    文章结构清晰明了,有理论有操作,很用心哦,