文本处理工具sed、vim

文本处理工具sedvim

一、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 /^$/dfile

sed 1,10dfile

nl /etc/passwd | sed 2,5d

nl /etc/passwd | sed 2a tea

sed 's/test/mytest/g' example

sed ns/root/&superman/p/etc/passwd  单词后

sed ns/root/superman&/p/etc/passwd  单词前

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

sed i.bak s/dog/cat/gpets

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 GFILE

 sed gFILE

 sed /^$/d;GFILE

 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
下一篇 2016-08-11

相关推荐

  • 10分钟学会理解和解决MySQL乱码问题

    本文将详细介绍MySQL乱码的成因和具体的解决方案。在阅读本文之前,强烈建议对字符集编码概念还比较模糊的同学 阅读下博主之前对相关概念的一篇科普:十分钟搞清字符集和字符编码 MySQL出现乱码的原因 要了解为什么会出现乱码,我们就先要理解:从客户端发起请求,到MySQL存储数据,再到下次从表取回客户端的过程中,哪些环节会有编码/解码的行为。为了更好的解释这个…

    2015-03-17
  • Linux上的文件管理类命令

    N27-第二周作业

    2017-10-08
  • 第二章 操作系统发展史

    Linux主流版本:   Debian(英语发音:/ˈdɛbiən/)是由GPL和其他自由软件许可协议授权的自由软件组成的操作系统,由Debian项目(Debian Project)组织维护。   历史: Debian于1993年8月16日由一名美国普渡大学学生伊恩·默多克(Ian Murdock)首次发表。伊恩·默多克最初把他的系统称为…

    Linux干货 2016-06-03
  • 8月3号 用户权限作业

     1,当用户xiaoming 对/testdir  目录无执行权限时,意味着无法做哪些操作?   先创建目录/testdir,接着修改目录的/testdir的权限,用xiaoming的身份去进入/testdir目录 [root@localhost ~]# mkdir /testdir [root@l…

    Linux干货 2016-08-08
  • linux学习总结-linux基础(之二)

    六、在Linux基础目录命名法则及功用 根据FHS(http://www.pathname.com/fhs/)的官方文件指出, 他们的主要目的是希望让使用者可以了解到已安装软件通常放置于那个目录下, 所以他们希望独立的软件开发商、操作系统制作者、以及想要维护系统的用户,都能够遵循FHS的标准。 也就是说,FHS的重点在于规范每个…

    Linux干货 2016-09-23
  • LVS:三种模式的原理、调度算法、及应用介绍

    LVS三种模式原理(nat/dr/tun) LVS/NAT:   如上图,客户通过virtual IP (虚拟服务的IP地址,公网地址),访问网络服务时,请求报文到达调度器,调度器根据连接调度算法从一组真实服务器中选出一台服务器,将报文的目标地址VIP,改写成选定服务器的地址(RIP),报文的目标端口改写成选定服务器的相应端口,最后将修改…

    Linux干货 2016-10-30

评论列表(1条)

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

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