文本处理工具sed、vim

文本处理工具sed、vim

一、sed的使用

1、sed的概念

sed简单地说sed是一种行处理工具。

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

2、sed的用法

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

v常用选项:

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

-e: 多点编辑

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

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

-i: 原处编辑

 script:地址命令

地址界定

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

  (2)单地址:#:指定的行

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

   (3)地址范围:

     #,# 某行到某行

     #,+#某行至某行的基础上加几行

      /pat1/,/pat2/  被pat1第一次匹配到的行至被pat2第一次匹配到的行之间

      #,/pat1/  某行至被/pat1第一次匹配到的行。

    (4) ~:步进

       1~2奇数行

       2~2偶数行

编辑命令:

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

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

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

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

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

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

r /path/from/somefile :读取指定文件的文本至模式空

间中匹配到的行后

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

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

 s///:查找替换,支持使用其它分隔号,   s@@@,s### 替换标记:g:行内全局替换

 p:显示替换成功的行

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

sed使用范例:

sed ‘2p’ /etc/passwd

sed –n ‘2p’ /etc/passwd

sed –n ‘1,4p’ /etc/passwd

sed –n ‘/root/p’ /etc/passwd

sed –n ‘2,/root/p’ /etc/passwd  从2 行开始

sed -n ‘/^$/=’ file  显示空行行号

sed –n –e ‘/^$/p’ –e ‘/^$/=’ file

sed ‘/root/a\superman’ /etc/passwd 行后

sed ‘/root/i\superman’ /etc/passwd  行前

  +sed ‘/root/c\superman’ /etc/passwd 代替行

sed ‘/^$/d’ file

sed ‘1,10d’ file

nl /etc/passwd | sed ‘2,5d’

nl /etc/passwd | sed ‘2a tea’

sed 's/test/mytest/g' example

sed –n‘s/root/&superman/p’ /etc/passwd  单词后

sed –n‘s/root/superman&/p’ /etc/passwd  单词前

sed -e ‘s/dog/cat/’ -e ‘s/hi/lo/’ pets

sed –i.bak ‘s/dog/cat/g’ pets

3、sed高级编辑模式

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

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

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

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

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

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

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

d:  删除模式空间中的行

D :删除 当前模式空间开端至\n 的内容(不在传至标准输

出),放弃之后的命令,但是对剩余模式空间重新执行sed

sed 示例

 sed -n 'n;p' FILE

     sed '1!G;h;$!d' FILE

 sed '$!N;$!D' FILE

 sed '$!d' FILE

 sed ‘G’ FILE

 sed ‘g’ FILE

 sed ‘/^$/d;G’ FILE

 sed 'n;d' FILE

 sed -n '1!G;h;$p' FILE

 

 

 

编辑文本工具vim

一、编辑工具介绍

   vi: Visual Interface ,文本编辑器

  文本:ASCII, Unicode

  文本编辑种类:

    行编辑器: sed

    全屏编辑器:nano, vi

    vim – Vi Improved

  其他编辑器:

    gedit

    一个简单的图形编辑器

    gvim

一个 Vim 编辑器的图形版本

二、文件的打开与关闭

 文件打开

# vim  [OPTION]… FILE…

+#:  打开文件后,直接让光标处于第# 行的行首

+/ PATTERN :打开文件后,直接让光标处于第一个被

PATTERN 匹配到的行的行首

vim + file  直接打开file, 光标在 最后一行

vim –b file  二进制方式打开文件

vim –d file1 file2… 比较多个文件

vim -m file 只读打开文件

 ex file 或 或 vim –e 直接进入ex 模式

 如果该文件存在,文件被打开并显示内容

如果该文件不存在,当编辑后第一次存盘时创建它

文件关闭

  扩展模式:

:q  退出

:q!  强制退出,丢弃做出的修改

:wq  保存退出

:x  保存退出

v命令模式

ZZ:  保存退出

ZQ:不保存退出

三、模式的转换

命令模式 –>  插入模式

i: insert,  在光标所在处输入

I :在当前光标所在行的行首 输入

a: append,  在光标所在处后面输入

A :在当前光标所在行的行尾 输入

o:  在当前光标所在行的下方打开一个新行

O :在当前光标所在行的上方打开一个新行

锁定和解锁:CTRL+s,Ctrl+q

四、扩展模式

  按“: ”进入Ex 模式

创建一个命令提示符:, 处于底部的屏幕左侧

命令:

w  写(存)磁盘文件

wq  写入并退出

x  写入并退出

q 退出

q!不存盘退出,即使更改都将丢失

r filename  读文件内容到当前文件中

w filename 将当前文件内容写入另一个文件

!command  在此模式下仍可执行别的命令

r!command  将执行的别的命令的结果输入到vim编辑的窗口中

  地址定界

:start_pos,end_pos

#:  具体第# 行,例如2 表示第2 行;

#,#:  从左侧# 表示行起始,到右侧# 表示行结尾

#,+#:  从左侧# 表示的行起始,加上右侧# 表示的行数

: :2,+3 表示2 到5行 行

.:  当前行

$:  最后一行

.,$-1  当前行到倒数第二行

% :全文,  相当于1,$

 /pat1/,/pat2/

从第一次被pat1 模式匹配到的行开始,一直到第一次被

pat2 匹配到的行结束

#,/pat/

/pat/,$

  使用方式:后跟一个编辑命令

d

y

w file:  将范围内的行另存至指定文件中

r file :在指定位置插入指定文件中的所有内容

23

扩展模式:查找

  查找

/PATTERN :从当前光标所在处向文件尾部查找

?PATTERN :从当前光标所在处向文件首部查找

n :与命令同方向

N:  与命令反方向

 s:  在扩展模式下完成查找替换操作

格式:s/ 要查找的内容/ 替换为的内容/ 修饰符

要查找的内容:可使用模式

替换为的内容:不能使用模式,但可以使用\1, \2, …

等后向引用符号;还可以使用“&” 引用前面查找时查找到的整

个内容

修饰符:

i:  忽略大小写

g:  全局替换;默认情况下,每一行只替换第一次出现

gc: 全局替换,每次替换前询问

v  查找替换中的分隔符/ 可替换为其它字符,例如

s@/etc@/var@g

s#/boot#/#i

撤销更改

u 撤销最近的更改

#u 撤销之前多次更改

U  撤消光标落在这行后所有此行的更改

 按 按Ctrl – r 重做最后的“撤消”更改

 .  重复前一个操作

 n. 重复前一个操作n次

五、命令模式

 1、命令模式光标跳转

v  字符间跳转:

h: 左 左 l: 右 右 j: 下 下 k: 上 上

#COMMAND :跳转由# 指定的个数的字符;

v  单词间跳转:

w :下一个单词的词首

e :当前或下一单词的词尾

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

#COMMAND :由# 指定一次跳转的单词数

v  当前页跳转:

H :页首   M:页中间行  L:页底

v  行首行尾跳转:

^:  跳转至行首的第一个非空白字符;

0:  跳转至行首

$:  跳转至行尾

v  行间移动:

#G 、扩展 模式:#  :跳转至由# 指定行

G :最后一行

1G, gg:  第一行

v  句间移动:

) :下一句 ( :上一句

v  段落间移动:

}: 下一段 {

   翻屏操作

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

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

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

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

2、命令行字符操作

  字符编辑:

x:  删除光标处的字符;

#x:  删除光标处起始的# 个字符

xp:  交换光标所在处的字符及其后面字符的位置

~: 转换大小写

v替换命令(r, replace)

r:  替换光标所在处的字符

R: 切换成REPLACE

  删除命令:

d:  删除命令,可结合光标跳转字符,实现范围删除;

d$:  删除到行尾

d^: 删除 到非空行首

d0: 删除到行首

dw:

de:

db:

#COMMAND

 dd:  删除光标所在的行

#dd :多行删除

 D: 从 当前光标 位置一直 删除到行 尾 ,留空行,等同于d$

  复制命令(y, yank): :

y:  复制,行为相似于d 命令

y$

y0

y^

ye

yw

yb

#COMMAND

 yy :复制行

  #yy:  复制多行

y:复制整行

   改变命令(c, change)

c:  修改后切换成插入模式

 命令模式 –>  插入模式

c$

c^

c0

cb

ce

cw

#COMMAND

v cc :删除当前行并输入新内容

#cc:

 C: :删除当前光标到行尾,并切换成插入模式

 100iwang [ESC]  粘贴“wang ”100次 次

 <start position><command><end position>

 Command:

 y 复制、d  删除、gU  变大写、gu  变小写

如 例如 0y$  命令意味着:

0 → →  先到行头

y → →  从这里开始拷贝

$ → →  拷贝到本行最后一个字符

ye  从当前位置拷贝到本单词的最后一个字符

六:vim寄存器

有 有26 个命名寄存器和1 个无命名寄存器,常存放不同的

剪贴版内容,可以不同会话间共享。

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

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

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

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

  有10 个数字寄存器,用0 ,1 ,… ,9 表示,0 存放最近复

制内容,1 存放最近删除内容。当新的文本变更和删除

时,1 转存到2 ,2 转存到3 ,以此类推。数字寄存器不能在不同会话间共享。

编辑二进制文件

  以二进制方式打开文件

vim –b binaryfile

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

:%!xxd

 编辑二进制文件

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

可视化模式

  允许选择的文本块

v

面向字符

V

面向行

ctrl-v  面向块

v  可视化键可用于与移动键结合使用:

w ,

, ) )  ,

}

,箭头等

  突出显示的文字可以被删除,复制,变更,过滤,搜索 / 替换

等

多窗口模式

多文件分割

vim -o|-O FILE1 FILE2 …

-o:  水平分割

-O:  垂直分割

在窗口间切换: Ctrl+w, Arrow

  单文件窗口分割:

Ctrl+w,s: split,  水平分割

Ctrl+w,v: vertical,  垂直分割

ctrl+w,q :取消相邻窗口

ctrl+w,o: 取消全部窗口

: wqall 退出

定制vim 的工作特性

  配置文件:永久有效

全局:/etc/vimrc

个人:~/.vimrc

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

 (1)  行号

显示:set number,  简写为set nu

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

 (2)  括号成对匹配

匹配:set showmatch,  简写为set sm

取消:set nosm

33

定制vim 的工作特性

 (3)  自动缩进

启用:set ai

禁用:set noai

 (4)  高亮搜索

启用:set hlsearch

禁用:set nohlsearch

 (5)  语法高亮

启用:syntax on

禁用:syntax off

 (6)  忽略字符的大小写

启用:set ic

不忽略:set noic

34

置 配置 vi and vim

 (7)  文件格式

启用: :fileformat=unix

不忽略: : fileformat=dos

(8)  设置文本宽度

:set textwidth=65 (vim only)

:set wrapmargin=15

:help option-list

:set or :set all

 

 

 

 

 

 

 

 

 

 

 

 

 

 

实用场景

一、更改与备份

使用sed进行文件修改时,如要备份可以使用.bak。

例如:sed  -i.bak  ‘/^U/r /etc/issue’  f3将/etc/issue的文件内容写入f3,并作更改,f3.bak是更改之前的备份文件。

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

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

相关推荐

  • MBR分区结构

    MBR分区结构 一、硬盘主引导记录MBR由4个部分组成: 1、主引导程序(偏移地址0000H–0088H),它负责从活动分区中装载,并运行系统引导程序。 2、出错信息数据区,偏移地址0089H–00E1H为出错信息,00E2H–01BDH全为0字节。 3、分区表(DPT,Disk Partition Table):含4个分…

    2017-08-20
  • 学会在命令行中获取帮助

    在命令行中获取帮助是学习Linux必须get的一项技能,学会之后受益多多。  Linux中的命令有内部命令和外部命令之分,通常使用 type 命令来区分 除此之外还可以使用 enable 命令来查看内部命令 enable命令后的许多option可以对这些内部命令了解更多,比如: 想要知道内部命令有多少个 enable -a |wc -l 禁用某个内…

    2017-07-15
  • Linux第九周总结

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; #!/bin/bash # login_user=0 nologin_user=0 for i in $(cat /etc/passwd | cut -d : -f 7);do &nbsp…

    Linux干货 2017-08-28
  • shell脚本的各种循环

    For循环 For循环格式      For   变量名  in    列表    ;   do         &nb…

    Linux干货 2016-08-21
  • 磁盘管理之文件系统

    一,概述 文件系统是操作系统用于明确存储设备或分区上的文件的方 法和数据结构;即在存储设备上组织文件的方法。操作系统 中负责管理和存储文件信息的软件结构称为文件管理系统, 简称文件系统。  从系统角度来看,文件系统是对文件存储设备的空间进行组 织和分配,负责文件存储并对存入的文件进行保护和检索的 系统。具体地说,它负责为用户建立文件,存入、读出、修…

    Linux干货 2016-09-05
  • 网络文件系统–NFS

        网络文件系统(英语:Network File System,缩写为NFS)是一种分布式文件系统协议,最初由Sun Microsystems公司开发,并于1984年发布。其功能旨在允许客户端主机可以像访问本地存储一样通过网络访问服务器端文件。     NFS和其他许多协议一…

    Linux干货 2017-08-14

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-12 11:56

    内容很详细,希望下次能用心排下版哦,字体统一起来看起来也标准一点呐