sed命令应用详解

sed应用详解

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

用法:sed [OPTION]... {script-only-if-no-other-script} [input-file]...

sed可依照script来处理文本文件,skript又包含地址定界和编辑命令。地址定界是指定要处理的文件范围,比如只处理文件的前十行内容,或者只处理文件的奇数行等,编辑命令是指对指定范围的内容进行怎样的处理,比如在屏幕上打印显示,或者删除、替换等操作,地址定界和编辑命令必须配合使用,如果不指定地址定界则默认对全文进行处理。sed本身也有选项参数,常用的选项参数如下所示:

-n:仅显示经过script处理后的结果,默认情况下,sed会自动打印模式空间的内容

-e:可以指定多个script同时处理

-f /path/to/script_file:从指定的文件中读取脚本并运行

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

-i:直接修改源文件

script地址定界的方式有:

(1)若不指定范围则表示处理全文

(2)#:#代表数字,指定行号

(3)/pattern/:模式匹配,被/pattern/匹配到的所有行

(4)#1,#2:表示从第#1行到第#2行之间所有的行

(5)#,+n:表示从第#行开始再向下n行之间的所有行

(6)/pat1/,/pat2/:表示从第一次被/pat1/匹配到的行开始,到第一次被/pat2/匹配到的行结束,中间所有的行

(7)#,/pat1/:表示从第#行开始,到第一次被/pat1/匹配到的行结束,之间所有的行

(8)first~step:表示指定起始行以及步长,比如1~2,1代表起始行,2代表步长,匹配到的行即为1,3,5,7...(奇数行)

(9)$:表示最后一行

script编辑命令有:

d:删除模式空间中的行

[[email protected] testdir]# cat test     #先查看test原文件内容
1aaaaaaaaaaaaaaaa
2bbbbbbbbbbbbbbbb
3cccccccccccccccc
4dddddddddddddddd
5eeeeeeeeeeeeeeee
6ffffffffffffffff
[[email protected] testdir]# sed ‘1d‘ test   #删除第1行
2bbbbbbbbbbbbbbbb
3cccccccccccccccc
4dddddddddddddddd
5eeeeeeeeeeeeeeee
6ffffffffffffffff

p:打印模式空间中的行

[[email protected] testdir]# sed -n ‘/aaa/p‘ test     #只打印匹配“aaa”的行
1aaaaaaaaaaaaaaaa

a \text:在当前行下面追加文本,支持使用\n实现多行追加

[[email protected] testdir]# sed ‘1,3a\ggggggggg‘ test   #在1至3行下面插入“ggggggggg”
1aaaaaaaaaaaaaaaa
ggggggggg
2bbbbbbbbbbbbbbbb
ggggggggg
3cccccccccccccccc
ggggggggg
4dddddddddddddddd
5eeeeeeeeeeeeeeee
6ffffffffffffffff

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

[[email protected] testdir]# sed ‘2,+2i\ggggggggg‘ test      #在从第2行开始向下2行的上面插入“ggggggggg”
1aaaaaaaaaaaaaaaa
ggggggggg
2bbbbbbbbbbbbbbbb
ggggggggg
3cccccccccccccccc
ggggggggg
4dddddddddddddddd
5eeeeeeeeeeeeeeee
6ffffffffffffffff

c \text:把选定的行改为新的文本

[[email protected] testdir]# sed ‘/a/,/c/c\ggggggggg‘ test    #将第一次匹配到的‘a’所在行至‘c’所在行之间的所有内容更改为“ggggggggg”
ggggggggg
4dddddddddddddddd
5eeeeeeeeeeeeeeee
6ffffffffffffffff

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

[[email protected] testdir]# sed -n ‘3,/f/=‘ test  #只显示从第3行开始到第一次匹配到“f”所在行之间的所有行的行号
3
4
5
6

s/regexp/replacement/:查找替换,替换由regexp所匹配到的内容为replacement,支持使用其他分隔符,条件是该分隔符在后面的模式中没有出现过,如[email protected]@@或s###,对于替换还有后选项,如下:

g:全局替换

p:显示替换成功的行

i:不区分大小写

[[email protected] testdir]# sed ‘1~2s/e/g/‘ test  #将奇数行中匹配到的第一个“e”替换成“g”
1aaaaaaaaaaaaaaaa
2bbbbbbbbbbbbbbbb
3cccccccccccccccc
4dddddddddddddddd
5geeeeeeeeeeeeeee
6ffffffffffffffff
[[email protected] testdir]# sed ‘1~2s/e/g/g‘ test #将奇数行中所有匹配到的“e”替换成“g”
1aaaaaaaaaaaaaaaa
2bbbbbbbbbbbbbbbb
3cccccccccccccccc
4dddddddddddddddd
5gggggggggggggggg
6ffffffffffffffff
[[email protected] testdir]# sed -n ‘1~2s/e/g/p‘ test   #将奇数行中所有匹配到的“e”替换成“g”,并只显示替换的行
5geeeeeeeeeeeeeee

w/path/to/somefile:把指定的内容另存至/path/to/somefile路径所指定的文件中

[[email protected] testdir]# sed -n ‘1,4w/testdir/testsave‘ test    #将test文件中的1至4行内容另存到/testdir/目录下的testsave文件中
[[email protected] testdir]# cat testsave    #查看testsave文件
1aaaaaaaaaaaaaaaa
2bbbbbbbbbbbbbbbb
3cccccccccccccccc
4dddddddddddddddd

r/path/form/somefile:在文件的指定位置插入另一个文件的所有内容,完成文件合并

[[email protected] testdir]# sed ‘3r/testdir/text‘ test   #将/testdir/text文件中的内容插入到test文件的第3行下面
1aaaaaaaaaaaaaaaa
2bbbbbbbbbbbbbbbb
3cccccccccccccccc
hhhhhhhhhhhhh
iiiiiiiiiiiii
jjjjjjjjjjjjj
4dddddddddddddddd
5eeeeeeeeeeeeeeee
6ffffffffffffffff

sed除了“模式空间”(pattern space)外,还有一个保持空间“hold space”。sed工作机制是每次读取一行文本至模式空间中, 在模式空间中完成处理,将处理结果输出值标准输出设备,在模式空间中处理一行内容后悔继续处理下一行,那么对于处理过的行可能还有其他的处理,因此可以先把处理过的行“传送”至保持空间中,然后在后续的处理中再次“传送”回模式空间中。

sed工具支持一些高级的命令运用到保持空间中,这些高级命令有:

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

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

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

G:从保持空间中取出数据追加至模式空间

x:交换保持空间和模式空间的内容

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

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

d:删除模式空间中的内容

D:删除多行模式空间中的首行

注意:

!:取反,表示后面的命令对所有没有被选定的行发生作用

;:分号可用于分割脚本

示例1:

[[email protected] testdir]# sed -n ‘n;p‘ test
2bbbbbbbbbbbbbbbb
4dddddddddddddddd
6ffffffffffffffff

sed的处理步骤为:

(1)因为n表示读取匹配到的行的下一行到模式空间中,因此第一次读取第1行时的动作是将第2行的内容覆盖至模式空间中,此时模式空间中的内容是第2行内容

(2)紧接着执行p操作,即打印模式空间的行(打印第2行内容)

(3)然后重复执行以上操作,继续读取下一行(即第3行,因为第2行已经读取过了),并将其下一行覆盖至模式空间(即模式空间的内容是第4行内容),然后再执行p操作(打印第4行内容),依次类推,直至文件读取完毕后结束sed运行

实例2:

[[email protected] testdir]# sed ‘1!G;h;$!d‘ test
6ffffffffffffffff
5eeeeeeeeeeeeeeee
4dddddddddddddddd
3cccccccccccccccc
2bbbbbbbbbbbbbbbb
1aaaaaaaaaaaaaaaa

sed的处理步骤为:

(1)读取文件的第一行内容到模式空间,因为第一行不执行G操作

(2)执行h操作,将模式空间的内容覆盖至保持空间

(3)因为不是最后一行,因此执行d操作,删错模式空间中的内容。此时模式空间内容为空,保持空间为第一行内容

(4)紧接着执行第2次循环,读取第2行内容,并执行G操作,将保持空间的内容追加至模式空间。此时模式空间为第2行和第1行内容,保持空间为第1行内容

(5)继续执行h操作,再把模式空间的内容覆盖至保持空间,因为第2行不是最后一行,然后在执行d操作,删除模式空间的内容。此时模式空间为空,保持空间为第2行和第1行内容(第1行内容在第2行下面)

(6)依次循环至文件最后一行,不执行d操作,此时模式空间的第1行内容为源文件的最后一行内容(行倒序排序),最后打印出模式空间的内容。

时间: 2024-08-22 20:19:59

sed命令应用详解的相关文章

Linux下的sed命令使用详解

sed是stream editor的简称,也就是流编辑器.它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”pattern space,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有 改变,除非你使用重定向存储输出. 使用语法sed命令的使用规则是这样的: sed [option] 'command' input_file 其中option是可选的,常用的option有如下几种: -n

sed命令使用详解

[[email protected] ~]# sed [-nefr] [动作] 选项与参数:-n :使用安静(silent)模式.在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上.但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来.-e :直接在命令列模式上进行 sed 的动作编辑:-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作:-r :sed 的动作支持的是延

shell三剑客之sed命令使用详解

sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有 改变,除非你使用重定向存储输出.Sed主要用来自动编辑一个或多个文件:简化对文件的反复操作:编写转换程序等. -sed的选项.命令.替换标记 命令格式 sed [option

linux sed命令使用详解

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

Linux sed命令实例详解

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

sed命令使用详解归纳

用法 sed [option] 'Address Command' yourfile e.g. sed -n '2,13p' lineuser #打印文件lineuser中第2~13行的内容,-n为option, 2,13为Address,p为Command Address与Command中间的空格也可以省略 sed处理过程 待处理的文件一行一行地被sed读入到模式空间(pattern space)中,根据匹配及相应的处理命令进行输出显示,默认下每个模式空间的内容都会输出 sed常用option

install 命令用法详解

install 命令用法详解 http://man.linuxde.net/install install命令的作用是安装或升级软件或备份数据,它的使用权限是所有用户.install命令和cp命令类似,都可以将文件/目录拷贝到指定的地点. 但是,install允许你控制目标文件的属性. install通常用于程序的makefile,使用它来将程序拷贝到目标(安装)目录  make install 语法 install [OPTION]... [-T] SOURCE DEST install [O

Pip 命令使用详解

Pip 命令使用详解 2015-01-06 21:44 3033人阅读 评论(0) 收藏 举报  分类: debian(3)  redis(1)  python 1.pip下载安装1.1 pip下载 1 # wget "https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=834b2904f92d46aaa333267fb1c922bb" --no-check-certificate 1.2 pip安装 1

linux wget 命令用法详解(附实例说明)

Linux wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到本地服务器.如果我们使用虚拟主机,处理这样的事务我们只能先从远程服务器下载到我们电脑磁盘,然后再用ftp工具上传到服务器.这样既浪费时间又浪费精力,那不没办法的事.而到了Linux VPS,它则可以直接下载到服务器而不用经过上传这一步.wget工具体积小但功能完善,它支持断点下载功能,同时支持FTP和HTTP下载方式,支持代理服务器和设置起来