文本处理工具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)
上一篇 2016-08-11 09:37
下一篇 2016-08-11 09:37

相关推荐

  • 马哥教育网络班20期+第四周博客作业

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 # cp -R /etc/skel /home/tuser1 # chmod -R go-x /home/tuser1 2、编辑/etc/gro…

    Linux干货 2016-06-29
  • 内核与内核模块

    内核与内核模块 先来看一下,内核与内核模块放在哪?这里以centos6为例 内核: /boot/vmlinuz或/boot/vmlinuz-version 内核解压所需要RAMDisk: /boot/initrc(/boot/initrc-version) 内核模块:/lib/modules/version/kernel或/lib/modules/uname…

    2017-09-04
  • Linus:利用二级指针删除单向链表

    感谢网友full_of_bull投递此文(注:此文最初发表在这个这里,我对原文后半段修改了许多,并加入了插图) Linus大婶在slashdot上回答一些编程爱好者的提问,其中一个人问他什么样的代码是他所喜好的,大婶表述了自己一些观点之后,举了一个指针的例子,解释了什么才是core low-level coding。 下面是Linus的教学原文及翻译—— “…

    Linux干货 2016-07-10
  • 浅述sed命令

    1、sed工作原理       sed(stream editor)是一种流编辑器,本身也是一个管道命令,可以分析编辑标准输入(standard input),包括对数据进行替换、删除、新增、选取特定行等等。运行时以行为单位,每次只处理一行的内容,因此它又被称为行编辑器。sed还可与正则表达式配合使用,从而简…

    Linux干货 2016-08-10
  • 阿里云修改hostname主机名的一点小技巧

    CentOS 7以后修改主机名一般使用: hostnamectl set-hostname newhostname 如果仍然无效,使用vim打开/etc/cloud/cloud.cfg,将 preserve_hostname=fale 改为 preserve_hostname=true 即可。 以上在阿里云ECS上亲测有效,使用了网上查阅…

    Linux干货 2017-01-09
  • Linux基础之文件管理和bash特性

    部分文件管理命令,bash的一些基础特性,部分glob文件匹配示例

    Linux干货 2018-01-16

评论列表(1条)

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

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