sed文本处理器

文本处理三剑客之一

sed(Stream Editor)简介:

sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(patternspace),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕(STDOUT)。然后读入下行,执行下一个循环。如果没有使诸如’D’的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,知道文件末尾。文件内容并没有改变,除非使用重定向存储输出。

sed与我们常用的vim的区别:

sed是非交互式的,而vim是交互式的,这意味着必须将要数据执行的命令插入到命令行或要处理的脚本中。Sed在一个文件或文件集中非交互式、并且不加询问地接收一系列的命令并执行它们。sed的强大之处就是可以对文件或者文件集批量的进行删除、替换、插入追加等操作,并且非常适合于重复的编辑,这种重复编辑如果由人工完成将花费大量的时间。

sed功能:

主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等

sed用法:

sed [option]… ‘script’ inputfile…

常用选项(option)

-n 使用安静(silent)模式.sed默认的处理结果是输出到STDOUT。但是如果加上-n参数后,则只有经过sed特殊处理的哪一行或者动作才会被别出来(与‘p’连用)

-e 直接在指令列模式上进行sed的动作编辑(多点编辑,可同时执行多条操作命令)

-f 直接将sed的动作写在一个文件内,-f filename则可以执行filename内的sed动作

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

-i 直接修改读取的文件内容,而不是由STDOUT输出

-i.bak 备份文件并原处编辑

script:

‘地址命令’

地址界定:

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

2、单地址:

#:指定的行,$: 最后一行

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

3、地址范围

#,# 从某一行到某一行

#,+# 从某一行到该行后的第几行

/pat1/,/pat2/ 从pat1匹配到的行到pat2匹配到的行

#,/pat1/ 从某一行到匹配到pat1的行

4、~: 步进

1~2 奇数行

2~2 偶数行

编辑命令:

d: 删除模式空间匹配的行,并立即启用下一轮循环

p: 打印当前模式空间内容,追加到默认输出之后

a [\]text: 在指定行后面追加文本,支持使用\n实现多行追加

将 this is a test line 追加到 以test 开头的行后面:

sed ‘/^test/a\this is a test line’ file

在 test.conf 文件第2行之后插入 this is a test line:

sed -i ‘2a\this is a test line’ test.conf

i [\]text:在行前面插入文本

将 this is a test line 追加到以test开头的行前面:

sed ‘/^test/i\this is a test line’ file

在test.conf文件第5行之前插入this is a test line:

sed -i ‘5i\this is a test line’ test.conf

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

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

r /path/somefile: 读取指定文件的文本至模式空间中匹配到的行后

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

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

s///: 查找替换,支持使用其他分隔符,s@@@,s###

替换标记

g: 行内全局替换

p: 显示替换成功的行

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

sed元字符集:

^ 匹配行开始,如:/^sed/匹配所有以sed开头的行。

$ 匹配行结束,如:/sed$/匹配所有以sed结尾的行。

. 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。

* 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。

[] 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。

[^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。

\(..\) 匹配子串,保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。

& 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。

\< 匹配单词的开始,如:/\<love/匹配包含以love开头的单词的行。

\> 匹配单词的结束,如/love\>/匹配包含以love结尾的单词的行。

x\{m\} 重复字符x,m次,如:/0\{5\}/匹配包含5个0的行。

x\{m,\} 重复字符x,至少m次,如:/0\{5,\}/匹配至少有5个0的行。

x\{m,n\} 重复字符x,至少m次,不多于n次,如:/0\{5,10\}/匹配5~10个0的行。

sed示例:

sed ‘2p’ /etc/passwd 输出所有内容并第二行多显示一次

sed -n ‘2p’ /etc/passwd 输出第二行

sed -n ‘1,4p’ /etc/passwd 输出1至4行

sed -n ‘/root/p’ /etc/passwd 显示包含root的行

sed -n ‘2,/root/p’ /etc/passwd 从第二行开始

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 删除1至10行

nl /etc/passwd | sed ‘2,5d’ 删除2至5行

nl /etc/passwd | sed ‘2a tea’ 第二行最后添加tea

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 搜索dog替换成cat,然后搜索hi替换成lo

sed -i.bak ‘s/dog/cat/g’ pets 备份文件pets.bak 将原文件中的dog替换成cat

高级编辑命令:

P:打印模式空间开端至\n内容,并追加到默认输出之前

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

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

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

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

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

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

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

d:删除模式空间中的行

D:如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本,并不会读取新的输入行,而使用合成的模式空间重新启动循环。如果模式空间不包含换行符,则会像发出d命令那样启动正常的新循环

sed示例:

sed -n ‘n;p’ FILE 偶数行

sed ‘1!G;h;$!d’ FILE 倒序

sed ‘N;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 倒序

想了解更多sed的用法可以查看下面的网址:

http://www.gnu.org/software/sed/manual/sed.html

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/89793

(1)
ChaogGeChaogGe
上一篇 2017-12-10
下一篇 2017-12-10

相关推荐

  • 网络配置

    Internet 协议特征  运行于OSI 网络层  面向无连接的协议  独立处理数据包  分层编址  尽力而为传输  无数据恢复功能     IP地址 它们可唯一标识IP 网络中的每台设备 每台主机(计算机、网络设备、外围设备)必须具有唯一的地址&…

    Linux干货 2016-09-06
  • M20 – 1- 第二周博客(1):帮助手册查询的使用

    Linux系统中存在诸多的命令,而这些命令分为内键命令和外部命令。如何查询命令属于内部还是外部呢。前一篇博客已经介绍type命令,type命令可以区分命令属于内部还是外部,下面举个例子: 为什么这一期博客还重复讲如何区分内部与外部命令呢,因为在man手册查询中,内部命令并不是使用man查询帮助手册,仅仅使用与外部命令,那内键命令如何查询呢,接下来要讲的就是h…

    Linux干货 2016-08-02
  • Linux的磁盘管理:

    Linux的磁盘管理: Linux的核心:一切介文件:     open,read,write,close 块设备:block,存取单位‘块’,磁盘 字符设备:char 存取单位‘字符’,键盘 设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信: 设备号码:   &nbs…

    Linux干货 2016-07-22
  • 文件查找命令之find

    文件查找命令一共有两种,locate 和find ,那么他们在用法和功能上面有什么区别呢?     locate:查找速度快,模糊查找,遍历整个文件系统的目录到数据库中,然后在去数据库中查找,依赖于事先创建好的索引库,该数据库属于系统自动创建,定期自动更新,也可手动跟新,更新命令updatedb,更新数据库需要遍历整个根文件系统…

    Linux干货 2016-08-16
  • 马哥教育网络班19期+第7周课程练习

    1.创建一个10G分区,并格式为ext4文件系统:   (1)要求其block大小为2048,预留空间百分比为2,卷标为MYDATA,默认挂载属性包含acl;   (2)挂载至/data/mydata目录,要求挂载时禁止程序自行运行,且不更新文件的访问时间戳;   fdisk /dev/sdb    part…

    Linux干货 2016-06-22
  • 用户和组的简介

     在第二周的学习中,关于用户和组是一个难点,也是重点,本篇博客则是对用户和组的简单阐述,如有错误或不足还请各位大牛指出,在此谢过! 1、用户 # 1.1用户的定义      通过前面对Linux 多用户的理解,我们明白Linux 是真正意义上的多用户操作系统,所以我们能在Linux系统中建若干用户(…

    Linux干货 2017-07-22