sed

一、sed命令基本用法

sed只是对缓冲区中原始文件的副本进行编辑,并不是编辑原始的文件。

如果需要保存sed改动的内容,有两种方式:

(1)将输出重定向到另一个文件

(2)使用sed编辑命令中的w选项

调用sed有三种方式,命令格式如下:

(1)在shell命令行输入命令调用sed,格式为:

sed [选项] 'sed命令' 输入文件

注意:需要用单引号将sed命令引起来

(2)将sed命令插入脚本文件后,然后通过sed命令调用它,格式为:

sed [选项] -f sed脚本文件 输入文件

(3)将sed命令插入脚本后,最常用的方法是设置该脚本文件为可执行,然后直接执行该脚本文件,格式为:

./sed脚本文件 输入文件


注意:sed命令通常由定位文本行和sed编辑命令两部分组成,sed编辑命令对定位文本行进行各种处理。


sed的常用选项:

-n:不打印所有的行到标准输出

-e:表示将下一个字符串解析为sed编辑命令,如果只传递一个编辑命令给sed,-e选项可以省略

-f:表示正在调用sed脚本文件


sed定位文本的方法:

x:x为指定行号

x,y:指定从x到y的行号范围

/pattern/:查询包含模式的行

/pattern/pattern/:查询包含两个模式的行

/pattern/,x:从与pattern的匹配行到x号行之间的行

x,/pattern/:从x号行到与pattern的匹配行之间的行

x,y!:查询不包括x和y行号的行


sed编辑命令:

p:打印匹配行

=:打印文件行号

a\:在定位行号之后追加文本信息

i\:在定位行号之前插入文本信息

d:删除定位行

c\:用新文本替换定位行

s:使用替换模式替换相应模式

r:从另一个文件中读文本

w:将文本写入到一个文件

y:变换字符

q:第一个模式匹配完成后退出

l:显示与八进制ASCII码等价的控制字符

{}:在定位行执行的命令组

n:读取下一个输入行,用下一个命令行处理新的行

h:将模式缓冲区的文本复制到保持缓冲区

H:将模式缓冲区的文本追加到保持缓冲区

x:互换模式缓冲区和保持缓冲区内容

g:将保持缓冲区的内容复制到模式缓冲区

G:将保持缓冲区的内容追加到模式缓冲区


二、sed命令选项

1、sed命令的-n选项

-n选项表示“不打印”功能是指:不打印sed编辑对象的全部内容。

sed匹配关键字也是大小写敏感的

sed -n '3,6p' input

sed -n '/certificate/p' input

2、sed命令的-e选项

-e选项指定其后面紧跟着的字符串为sed编辑命令

sed不支持同时带多个编辑命令的用法

带多个编辑命令sed的一般格式为:

sed [选项] -e 编辑命令1 -e 编辑命令2 ... -e 编辑命令n 输入文件

sed -n -e '/Certificate/p' -e '/Certificate/=' input

3、sed命令的-f选项

-f选项只有调用sed脚本文件时才起作用

三、sed文本定位

1、匹配元字符

sed -n '/\./p' input      #匹配.符号

2、使用元字符进行匹配

sed基本编辑命令可以放在单引号内,也可放在单引号外。

sed -n '$'p input      #匹配最后一行

3、!符号

!符号表示取反,x,y!表示匹配不在x和y行号范围内的行。

x!表示匹配除了x行号外的所有行,但是!符号不能用于关键字匹配,如无法表示不与/pattern/匹配的行。

sed -n '2,10!p' input

4、使用行号与关键字匹配限定行范围

sed -n '/seugrid/,$p' input      #打印与seugrid的匹配行到最后一行

四、sed基本编辑命令

1、追加文本

sed编辑命令a\符号用于追加文本,它可以将指定文本的一行或多行追加到指定行后面。如果不指定文本追加位置,sed默认放置到每一行后面,追加文本的格式:

sed "指定地址a\text" 输入文件

指定地址以匹配模式/pattern/或行号的形式给出,用于定位新文本的追加位置,sed对a\后的文本进行追加操作。

2、插入文本

插入文本和追加文本类似,区别仅在于追加文本是在匹配行的后面插入,而插入文本是在匹配行的前面插入,sed编辑命令的插入文本符号为i\,插入文本的格式为:

sed '指定地址i\text' 输入文件

3、修改文本

修改文本是指将所匹配的文本行利用新文本行替代,sed编辑命令的修改文本符号为c\,修改文本的格式为:

sed '指定地址c\text' 输入文件

4、删除文本

sed删除文本命令可以将指定行或指定行的范围进行删除,sed编辑命令的删除文本符号为d,删除文本的格式为:

指定地址 d

注意:sed编辑命令中的删除操作符号是d,后面不带“\”符号,与追加、插入、修改等命令有所区别。

sed '$d' input      #删除最后一行文本

5、替换文本

sed替换文本操作将所匹配的文本行利用新文本替换,替换文本与修改文本功能有相似之处,区别在于修改文本是对整行进行修改,替换文本可以替换一个字符串。sed编辑命令的替换文本符号为s,替换文本的格式为:

s/被替换的字符串/新字符串/[替换选项]


sed替换选项:

g:表示替换文本中所有出现被替换字符串之处

p:与-n选项结合,只打印替换行

w文件名:表示将输出定向到一个文件


默认情况下,sed s命令将替换后的全部文本都输出,如果要求只打印替换行,需要结合使用-n和p选项,命令格式如下:

sed -n 's/被替换的字符串/新字符串/p' 输入文件

sed -n '/Certificate/CERTIFICATE/p' input

sed替换命令在默认情况下,即不带g选项时,对某行的第1处匹配关键字进行替换后,就跳转到下面匹配行。而g选项使得sed替换命令对某行的所有关键字都进行替换。

sed替换文本命令还可指定替换第几次匹配的关键字,只需在替换选项加上相应的数字即可,数字范围需要在1~512之间。

sed -n 's/seu/njue/2p' input      #sed替换第3次匹配

w选项后加文件名表示将输出定向到这个文件,如果输出文件未曾建立,sed命令自动建立输出文件,默认目录是当前工作目录。

sed -n 's/seu/njue/w output' input      #将seu字符串改为njue,并将结果写入到ouput文件

&符号可用来保存被替换的字符串以供调用。如果我们需要将seu用圆括号括起来,可用以下两条等价的命令:

sed -n 's/seu/(&)pg' input

sed -n 's/seu/(seu)/pg' input

6、写入一个新文件

sed命令指示对缓冲区中输入文件的复制内容进行编辑,如果要保存编辑结果,需要将编辑后的文本重定向到另一个文件,sed写入文件的符号为w,基本格式为:

指定地址 w 文件名

w的用法与sed替换文本中w选项相似

sed -n '/globus/w output' input      #将匹配globus的行写入文件

7、从文件中读入文本

sed命令还可将其他文件中的文本读入,并附加在指定地址之后,sed读入文件的符号为r,基本格式为:

指定地址 r 文件名

sed '/Certificate/r otherfile' input

8、退出命令

sed命令的q选项表示完成指定地址的匹配后立即退出,基本格式为:

指定地址 q

sed -n '/.r.*/p' input      #查找任意字符后跟r字符,再跟0个或多个任意字符的字符串

9、变换命令

sed命令的y选项表示字符变换,它将一系列的字符变换为相应的字符,sed y命令是对字符的逐个处理,基本格式为:

sed 'y/被变换的字符序列/变换的字符序列/' 输入文件

sed y命令要求被变换的字符序列和变换的字符序列等长,否则sed y命令将报错。

sed 'y/fmj/FMJ/' input      #将fmj三个字符变换为大写

10、显示控制字符

控制字符就是非打印字符,sed l命令可以显示文件中的控制字符,方便用户对控制字符进行处理。

sed -n '1,$l' control

11、在定位行执行命令组

sed编辑命令中的“{}”符号可以指定在定位行上所执行的命令组,它的作用与sed的-e选项类似,都是为了在定位行执行多个编辑命令。

sed -n '/Certificate/{p;=}' input

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容

  • 本文承接之前写的三十分钟学会AWK一文,在学习完AWK之后,趁热打铁又学习了一下SED,不得不说这两个工具真的堪称...
    mylxsw阅读 4,382评论 3 74
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,135评论 2 34
  • Sed工具工作原理及特性 1. sed是流编辑器,每一次读取一行到内存中,即称之为模式空间(pattern spa...
    魏镇坪阅读 10,924评论 0 12
  • 说明:本篇文章来自老男孩,这里只做备份记录 功能说明 Sed是Stream Editor(流编辑器)缩写,是操作、...
    think_lonely阅读 709评论 0 2
  • sed与awk实例 文本间隔 在每一行后面增加一空行 将原来的所有空行删除并在每一行后面增加一空行。这样在输出的文...
    stuha阅读 1,883评论 0 21