xml地图|网站地图|网站标签 [设为首页] [加入收藏]
来自 新闻动态 2019-09-29 12:26 的文章
当前位置: 新濠国际登录平台 > 新闻动态 > 正文

新濠国际登录平台:接着用sed命令处理缓冲区中

1.先按Esc进入命令模式,然后在打出‘:’(英文输入模式下)

目录

  1. 正文
  2. 打开文件进入编辑
  3. 注意当前模式
  4. 光标移动
  5. 插入内容
  6. 删除
  7. 撤销操作
  8. 拷贝粘贴
  9. 保存/退出
  10. 在两个文件中复制粘贴
  11. 搜索字符串
  12. 替换字符串

sed编辑器逐行处理输入,然后把结果发送到屏幕。

shell sed命令详解

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

sed命令和选项:

a 在当前行后添加一行或多行

c 用新文本替换当前行中的文本

d 删除行

i 在当前行之前插入文本

h 把模式空间的内容复制到暂存缓冲区

H 把模式空间的内容添加到缓冲区

g 取出暂存缓冲区的内容,将其复制到模式缓冲区

G 取出暂存缓冲区的内容,将其追加到模式缓冲区

l 列出非打印字符

p 打印行

n 读入下一行输入,并从下一条而不是第一条命令对其处理

q 结束或退出sed

r 从文件中读取输入行

! 对所选行以外的行应用所有命令

s 用一个字符串替换另外一个字符串

替换标志:

g 在行内进行全局替换

p 打印行

w 将行写入文件

x 交换暂存缓冲区和模式空间的内容

y 将字符转换成另外一个字符

2.输入格式:  首行数,末行数s/要替换的字符串/替换的字符串/g    (不加g只替换每行的一个要替换的字符串,后面的不会替换)

正文

下面介绍vi 的一般用法,本文适合初学者入门,但不适合作为手册进行查询,如果需要以命令导向的手册,请使用$ man vi|more

 

-i选项:直接作用源文件,源文件将被修改。

打印:p命令

sed ‘/abc/p’ file

打印file中包含abc的行。默认情况sed把所有行都打印到屏幕,如果某行匹配到模式,则把该行另外再打印一遍

sed  -n ‘/abc/p’ file 和上面一样,只是去掉了sed的默认行为,只会打印匹配的行

    eg:12,22s/abc/123/g  将12行到22行的字符串’abc‘替换成’123‘ (s代表字符串的意思)

打开文件进入编辑

编辑一个文件:

$ vi example.txt

同时编辑多个文件:

$ vi file1 file2 ... fileN

如果使用vi 编辑的某个文件没有正常保存退出,会遗留一个隐含的文件:.filename.swp ,使用如下命令恢复从最后一次保存到非正常退出前所做的编辑:

$ vi -r filename

 

sed命令和选项:

删除:d命令

sed ‘3,$d’ file    删除从第3行到最后一行的内容。

sed ‘$d’ file 删除最后一行的内容

sed ‘/abc/d’ 删除包含abc的行。

sed ‘3d’ file 删除第三行的内容

 

注意当前模式

进入文件编辑后,vi有四种模式,一种是插入模式(按键盘i 进入),这个模式下键盘输入会作为字符增加到文件中。

另一种是编辑模式,这个状态下可以直接输入命令来移动光标,删除字符等操作,不需要回车确认,每一个命令按键都会直接发生作用。在插入模式下按ESC 键会回到编辑模式。

第三种是命令模式,在编辑模式下按冒号":" 即进入命令模式,这时键盘输入的字符会出现在屏幕下方,回车后,命令执行。这个模式下可以输入保存、字符串搜索、退出编辑等命令。命令模式下,按回车或者ESC 键,回到编辑模式。

第四种是搜索模式,在编辑模式下输入斜杠"/" 或者问号"?" 即进入搜索模式。

上面的四种模式是我为了描述方便所起的名字,下面将引用到。

 

a在当前行后添加一行或多行

替换:s命令

sed  ‘s/abc/def/g’ file 把行内的所有abc替换成def,如果没有g,则只替换行内的第一个abc

sed  -n ‘s/abc/def/p’ file 只打印发生替换的那些行

sed  ‘s/abc/&def/’ file 在所有的abc后面添加def(&表示匹配的内容)

sed  -n ‘s/abc/def/gp’ file 把所有的abc替换成def,并打印发生替换的那些行

sed  ‘s#abc#def#g’ file 把所有的abc替换成def,跟在替换s后面的字符就是查找串和

替换串之间的分割字符,本例中试#

指定行的范围:逗号

sed  -n ‘/abc/,/def/p’ file 打印模式abc到def的行

sed  -n ‘5/,/def/p’ file 打印从第五行到包含def行之间的行。

sed /abd/,/def/s/aaa/bbb/g 修改从模式abc到模式def之间的行,把aaa替换成def

补充:如果指定行数,在s前面加上'%'可以实现全文范围内替换

光标移动

光标的上、下、左、右移动,分别对应按键:k、j、h、l (编辑模式)。

定位到最后一行,输入大写G(编辑模式)。

回到第一行,输入小写g(编辑模式)。

跳到第n 行,在命令模式下输入数字n ,回车。

显示当前所在行数和列数,编辑模式下输入ctrl+g 。

 

c用新文本替换当前行中的文本

多重编辑-e

sed  -e ‘1,3d’ -e ‘s/abc/def/g’ file 删除1-3行,然后把其余行的abc替换成def

 

插入内容

在当前字符前面插入内容,编辑模式下输入i ,进入了插入模式,然后输入内容,输入完成之后,按ESC 回到编辑模式。

在当前字符后面插入内容,编辑模式下输入a ,其它操作与上面相同。

在本行首插入内容,编辑模式下输入大写I 。其它操作与上面相同。

在本行尾追加内容,编辑模式下输入大写A 。其它操作与上面相同。

 

d删除行

读文件:r命令

sed  ‘/abc/r newfile’ file 在包含abc的行后读入newfile的内容

删除

删除当前光标的字符,编辑模式下输入x ,如果希望删除当前光标前面的字符,输入大写X 。

删除一行,编辑模式下连续两次输入d 。删除一个单词,编辑模式下依次输入dw 。

从当前光标删除至行尾,编辑模式下依次输入d$ 。

 

i在当前行之前插入文本

写文件:w命令

sed  ‘/abc/w newfile’ file 在包含abc的行写入newfile

撤销操作

撤销刚才的一次修改,编辑模式下输入u ,撤销对这一整行的修改,输入大写U 。

如果希望撤销对文件的所有修改,命令模式下依次输入e! ,回车(输入冒号":" 进入命令模式,:e!)。

 

h把模式空间的内容复制到暂存缓冲区

追加:a命令

sed  ‘/abc/adef’ file 在包含abc的行后新起一行,写入def

拷贝粘贴

拷贝一行内容,编辑模式下连续输入两次y 。

将剪贴板中的一行粘贴到当前行的后面,编辑模式下输入p 。

拷贝n 行内容,编辑模式下输入数字n(n是要拷贝的行数,从当前行算起),然后输入y ,拷贝完成,输入p 粘贴多行。

 

H把模式空间的内容添加到缓冲区

插入:i命令

sed  ‘/abc/idef’ file 在包含abc的行前新起一行,写入def

保存/退出

如果保存并关闭文件,命令模式下输入x ,回车即可。

如果保存,同时继续文件编辑,命令模式下输入w ,回车。

如果放弃所有更改,直接退出,命令模式下输入q! ,回车。

命令模式下输入wq 与x 等价。

 

g取出暂存缓冲区的内容,将其复制到模式缓冲区

修改:c命令

sed  ‘/abc/cdef’ file 在包含abc的行替换成def,旧文本被覆盖

在两个文件中复制粘贴

需要将file2 的某行粘贴到file1 中。

同时打开两个文件,中间用空格分隔:

$ vi file1.txt file2.txt

打开后当前编辑的为file1 ,在命令模式下输入n ,切换到file2。

找到相关行,编辑模式下输入yy ,再进入命令模式,输入大写N ,切换回上一个文件(以打开顺序为准),找到相关位置,编辑模式下输入p ,粘贴完毕。

 

G取出暂存缓冲区的内容,将其追加到模式缓冲区

读取下一行:n命令

sed  ‘/abc/{n ; s/aaa/bbb/g;}’ file 读取包含abc的行的下一行,替换aaa为bbb

搜索字符串

要搜索字符串abc ,在搜索模式下(编辑模式下输入斜杠"/" 或者问号"?" 即进入搜索模式),输入abc ,回车。

如果找到,光标会定位到从当前位置到第一个出现字符串abc 的位置,输入n 会跳到下一个abc 出现的位置,输入大写N ,跳到上一个abc 出现的位置。

斜杠"/" 与问号"?" 的区别,前者向后正向搜索,后者向前反向搜索。

 

l列出非打印字符

转换:y命令

sed  ‘y/abc/ABC’ file 将a替换成A,b替换成B,c替换成C(正则表达式元字符不起作用)

替换字符串

要将当前行中的所有字符串abc 替换成efg ,命令模式下输入s/abc/efg/g ,回车。

上面命令只会替换abc 而不会替换ABC 或者aBc 。如果希望忽略大小写,加上参数i ,s/abc/efg/gi ,回车。

如果希望进行全文件范围替换,命令模式下输入%s/abc/efg/g ,回车。

如果替换的字符串中包含了例如斜杠"/" 这样的特殊字符,使用反斜杠"" 转义。

命令模式下,输入%s//image//img/gi ,回车

以上命令会将文件中所有的字符串/image 替换成 /img ,并且不区分image 的大小写。

新濠国际登录平台 1

p打印行

退出:q命令

sed  ‘/abc/{ s/aaa/bbb/ ;q; }’ file 在某行包含了abc,把aaa替换成bbb,然后退出sed。

暂存和取用:h命令(把模式行存储到暂存缓冲区)和g(取出暂存缓冲区的行并覆盖模式缓冲区)G(取出临时缓冲区的行)命令

h和g是复制行为(覆盖),H和G表示追加。

sed  -e ‘/abc/h’  -e ‘$G’ file 包含abc的行通过h命令保存到暂存缓冲区,在第二条命令汇中,sed读到最后一行$时,G命令从暂存缓冲区中读取一行,追加到模式缓冲区的后面。即所有包含abc的行的最后一行被复制到文件末尾。

新濠国际登录平台,sed -e ‘/abc/{h; d;}’

-e  ‘/def/{g; }’ file 包含abc的行会移到包含def的行上,并进行覆盖。

n读入下一行输入,并从下一条而不是第一条命令对其处理

暂存和互换:h和x命令

sed  -e ‘/abc/h’

-e ‘/def/x’ file 包含abc的行会被换成def的行。

q结束或退出sed

r从文件中读取输入行

!对所选行以外的行应用所有命令

s用一个字符串替换另外一个字符串

本文由新濠国际登录平台发布于新闻动态,转载请注明出处:新濠国际登录平台:接着用sed命令处理缓冲区中

关键词: