sed用法介绍

sed用法介绍
sed是一个非交互性文本流编辑器.它编辑文件或标准输入导出的文本拷贝.标准输入可能是来自键盘、文件重定向、字符串或变量,或者是一个管道的文本.sed可以做些什么呢?别忘了, Vi也是一个文本编辑器。sed可以随意编辑小或大的文件,有许多sed命令用来编辑、删除,并允许做这项工作时不在现场. s e d一次性处理所有改变,因而变得很有效,对用户来讲,最重要的是节省了时间。
    本章内容有:
    • 抽取域。
    • 匹配正则表达式。
    • 比较域。
    • 增加、附加、替换。
    • 基本的sed命令和一行脚本。
    可以在命令行输入sed命令,也可以在一个文件中写入命令,然后调用sed,这与a w k基本相同。使用 s e d需要记住的一个重要事实是,无论命令是什么,sed并不与初始化文件打交道,它操作的只是一个拷贝,然后所有的改动如果没有重定向到一个文件,将输出到屏幕。
    因为sed是一个非交互性编辑器,必须通过行号或正则表达式指定要改变的文本行。
    本章介绍sed用法和功能。本章大多编写的是一行命令和小脚本。这样做可以慢慢加深对sed用法的了解,取得宝贵的经验,以便最终自己编出大的复杂sed脚本。
    和grep与awk一样,sed是一种重要的文本过滤工具,或者使用一行命令或者使用管道与grep与awk相结合。


10.1 sed怎样读取数据
    sed从文件的一个文本行或从标准输入的几种格式中读取数据,将之拷贝到一个编辑缓冲
区,然后读命令行或脚本的第一条命令,并使用这些命令查找模式或定位行号编辑它。重复
此过程直到命令结束。


10.2 调用sed
    调用sed有三种方式:在命令行键入命令;将sed命令插入脚本文件,然后调用sed;将sed
命令插入脚本文件,并使 sed脚本可执行。
使用sed命令行格式为:
sed [选项] sed命令 输入文件。
记住在命令行使用 sed命令时,实际命令要加单引号。 sed也允许加双引号。
使用sed脚本文件,格式为:
脚本文件  输入文件
sed [选项] -f sed
要使用第一行具有 sed命令解释器的sed脚本文件,其格式为:

不管是使用shell命令行方式或脚本文件方式,如果没有指定输入文件,sed从标准输入中接受输入,一般是键盘或重定向结果。
    sed选项如下:
    n 不打印;sed不写编辑行到标准输出,缺省为打印所有行(编辑和未编辑)
    p命令可以用来打印编辑行。
    c 下一命令是编辑命令。使用多项编辑时加入此选项。如果只用到一条 sed命令,    此选项无用,但指定它也没有关系。
    f 如果正在调用sed脚本文件,使用此选项。此选项通知sed一个脚本文件支持所有的sed命令,例如:sed -f myscript.sed input_file,这里myscript.sed即为支持sed命令的文件。
10.2.1 保存sed输出
    由于不接触初始化文件,如果想要保存改动内容,简单地将所有输出重定向到一个文件即可。下面的例子重定向sed命令的所有输出至文件’myoutfile‘,当对结果很满意时使用这种方法。



10.2.2 使用sed在文件中查询文本的方式
    sed浏览输入文件时,缺省从第一行开始,有两种方式定位文本:
    1) 使用行号,可以是一个简单数字,或是一个行号范围。
    2) 使用正则表达式,怎样构建这些模式请参见第 7章。
    表10-1给出使用sed定位文本的一些方式。
           表10-1 使用sed在文件中定位文本的方式
           x                         x为一行号,如 1
           x,y                       表示行号范围从 x到y,如2,5表示从第 2行到第5行
           /pattern/                 查询包含模式的行。例如 /disk/或/[a-z]/
           /pattern/pattern/         查询包含两个模式的行。例如 /disk/disks/
           /pattern/,x               在给定行号上查询包含模式的行。如 /ribbon/,3
           x,/pattern/               通过行号和模式查询匹配行。 3./vdu/
           x,y!                      查询不包含指定行号 x和y的行。1,2!

sed编辑命令

如下:                 
                 p                     打印匹配行

                 =                     显示文件行号
                 
                 a\                    在定位行号后附加新文本信息
                 
                 i\                    在定位行号后插入新文本信息
                 
                 d                     删除定位行
                 
                 c\                    用新文本替换定位文本

                 s                     使用替换模式替换相应模式
             
                 r                     从另一个文件中读文本
             
                 w                     写文本到一个文件
             
                 q                     第一个模式匹配完成后推出或立即推出
             
                 l                     显示与八进制 ASCII代码等价的控制字符
             
                 {}                    在定位行执行的命令组
             
                 n                     从另一个文件中读文本下一行,并附加在下一行
             
                 g                     将模式2粘贴到/pattern n/
             
                 y                     传送字符
             
                 n                     延续到下一输入行;允许跨行的模式匹配语句

notice:刚开始看的时候并不需要全记下来。再接下来的操作中跟着例子一步步熟悉吧

基本sed编程举例一

如果不特别声明, sed例子中使用下述文本文件 quote.txt。
$cat quote.txt
The honeysuckle band played all night long for only $90.
It was an evening of splendid music and company.
Too bad the disco floor fell through at 23:10.
The local nurse Miss P.Neave was in attendance.


10.3 sed和正则表达式
    s e d识别任何基本正则表达式和模式及其行匹配规则。记住规则之一是:如果要定位一特
殊字符,必须使用( \)屏蔽其特殊含义,如有必要请参照第 7章正则表达式。第 7章使用的所
有正则表达式在 sed中都是合法的


10.4 基本sed编程举例
    下面通过例子实际检验一下 sed的编辑功能。
10.4.1 使用p(rint)显示行
    print命令格式为 [address[,address]P。显示文本行必须提供sed命令行号。
$sed '2p' quote.txt
The honeysuckle band played all night long for only $90.
It was an evening of splendid music and company.
It was an evening of splendid music and company.
Too bad the disco floor fell through at 23:10.
The local nurse Miss P.Neave was in attendance.
    错误在哪儿?原意只打印第二行,但是却打印了文件中所有行,为此需使用-n选项,显
示打印定位(匹配行。
$sed -n '2p' quote.txt
It was an evening of splendid music and company.

10.4.2 打印范围
    可以指定行的范围,现打印 1到3行,用逗号分隔行号。
$sed -n '1,3p' quote.txt
The honeysuckle band played all night long for only $90.
It was an evening of splendid music and company.
Too bad the disco floor fell through at 23:10.

10.4.3 打印模式
    假定要匹配单词 Neave,并打印此行,方法如下。使用模式 /pattern/格式,这里为/Neave/。
$sed -n '/Neave/p' quote.txt
The local nurse Miss P.Neave was in attendance.

10.4.4 使用模式和行号进行查询
    为编辑某个单词浏览一个文件时, s e d返回包含指定单词的许多行。怎样使返回结果更精
确以满足模式匹配呢?可以将行号和模式结合使用。下面这个例子,假定要改动文件 quote.txt
最后一行中的单词The,使用sed查询The,返回两行:
$sed -n '/The/p' quote.txt
The honeysuckle band played all night long for only $90.
The local nurse Miss P.Neave was in attendance.
    使用模式与行号的混合方式可以剔除第一行,格式为line_number,/pattern/。逗号用来分隔行号与模式开始部分。为达到预期结果,使用4,/The/。意即只在第四行查询模式The,命令如下:
$sed -n '4,/The/p' quote.txt
The local nurse Miss P.Neave was in attendance.


10.4.5 匹配元字符
    匹配元字符 $前,必须使用反斜线 \屏蔽其特殊含义。模式为 /\$/p 。
$sed -n '/\$/p' quote.txt
The honeysuckle band played all night long for only $90.


10.4.6 显示整个文件
    要打印整个文件,只需将行范围设为第一行到最后一行 1,$。$意为最后一行。
$sed -n '1,$p' quote.txt
The honeysuckle band played all night long for only $90.
It was an evening of splendid music and company.
Too bad the disco floor fell through at 23:10.
The local nurse Miss P.Neave was in attendance.
也可以用$sed -n 'p' quote.txt来打印整个文件

10.4.7 任意字符
    匹配任意字母,后跟任意字母的0次或多次重复,并以ing结尾,模式为/.*ing/。可以使用这个模式查询以 ing结尾的任意单词。
$sed -n '/.*ing/p' quote.txt
It was an evening of splendid music and company.


10.4.8 首行
    要打印文件第一行,使用行号:
$sed -n '1p' quote.txt
The honeysuckle band played all night long for only $90.


10.4.9 最后一行
    要打印最后一行,使用 $。$是代表最后一行的元字符。
$sed -n '$p' quote.txt
The local nurse Miss P.Neave was in attendance.



10.4.10 打印行号
    要打印行号,使用等号 =。打印模式匹配的行号,使用格式 /pattern/=。
$sed -e '/music/=' quote.txt
The honeysuckle band played all night long for only $90.
2
It was an evening of splendid music and company.
Too bad the disco floor fell through at 23:10.
The local nurse Miss P.Neave was in attendance.
    整个文件都打印出来,并且匹配行打印了行号。如果只关心实际行号,使用 -n选项。
$sed -n '/music=/' quote.txt
2
    如果只打印行号及匹配行,必须使用两个sed命令,并使用-e选项。第一个命令打印模式
匹配行,第二个使用=选项打印行号,格式为sed -n -e /pattern/p -e /pattern/=。
$sed -n -e '/music/p' -e '/music/=' quote.txt
It was an evening of splendid music and company.
2

基本sed编程举例二

10.4.11 附加文本
    要附加文本,使用符号a\,可以将指定文本一行或多行附加到指定行。如果不指定文本放
置位置,sed缺省放在每一行后面。附加文本时不能指定范围,只允许一个地址模式。文本附
加操作时,结果输出在标准输出上。注意它不能被编辑,因为sed执行时,首先将文件的一行
文本拷贝至缓冲区,在这里sed编辑命令执行所有操作(不是在初始文件上)                   ,因为文本直接输出到标准输出,sed并无拷贝。
    要想在附加操作后编辑文本,必须保存文件,然后运行另一个 s e d命令编辑它。这时文件的内容又被移至缓冲区。
    附加操作格式如下:
[address]a\
text\
text\
...
text
    地址指定一个模式或行号,定位新文本附加位置。a\ 通知sed对a\后的文本进行实际附加
操作。观察格式,注意每一行后面有一斜划线,这个斜划线代表换行。 s e d执行到这儿,将创
建一新行,然后插入下一文本行。最后一行不加斜划线, sed假定这是附加命令结尾。
    当附加或插入文本或键入几个 s e d命令时,可以利用辅助的shell提示符以输入多行命令。
这里没有这样做,因为可以留给使用者自己编写,并且在一个脚本文件中写这样的语句更适宜。现在马上讲述 sed脚本文件。另外,脚本可以加入空行和注释行以增加可读性。

10.4.12 创建sed脚本文件
    要创建脚本文件 append.sed,输入下列命令:
$cat >./append.sed<<EOF
> #!/bin/sed -f
> /company/ a\
> Then suddenly it happened.\
> Then suddenly.
> EOF
    当然你也可以用vi来编辑这个文件
    保存它,增加可执行权限:
$chmod u+x ./append.sed
    运行,
$./append.sed quote.txt
The honeysuckle band played all night long for only $90.
It was an evening of splendid music and company.
Then suddenly it happened.
Just suddenly.
Too bad the disco floor fell through at 23:10.
The local nurse Miss P.Neave was in attendance.



10.4.13 插入文本
    插入命令类似于附加命令,只是在指定行前面插入。和附加命令一样,它也只接受一个
地址。下面是插入命令的一般格式。地址是匹配模式或行号:
    下面例子在以attendance结尾的行前插入文本 utter confusion followed。
#!/bin/sed -f
/attendance/ i\
utter confusion followed
    运行结果是:
The honeysuckle band played all night long for only $90.
It was an evening of splendid music and company.
Too bad the disco floor fell through at 23:10.
utter confusion followed
The local nurse Miss P.Neave was in attendance.
     也可以使用行号指定文本插入位置,插入位置在模式或指定行号4之前。脚本如下:
#!/bin/sed -f 
4 i\
utter confusion followed.


10.4.14 修改文本
    修改命令将在匹配模式空间的指定行用新文本加以替代,格式如下:
[address[,address] c\
text\
text\
...
text
    将第一行The honeysuckle band played all night long for only $90.替换为The office Dibble band played well.首先要匹配第一行的任何部分,可使用模式/honeysuckle/’. sed脚本文件为change.sed。内容如下:
#!/bin/sed -f
#change.sed
/honeysuckle/ c\
The Office Dibble band played well.
    运行它,不要忘了给脚本增加可执行权限。 chmod u+x change.sed。结果如下 :
The Office Dibble band played well.
It was an evening of splendid music and company.
Too bad the disco floor fell through at 23:10.
The local nurse Miss P.Neave was in attendance.
    像插入动作一样,可以使用行号代替模式,两种方式完成相同的功能。
#!/bin/sed -f
1 c\
The Office Dibble band played well.

    可以对同一个脚本中的相同文件进行修改、附加、插入三种动作匹配和混合操作。
    下面是一个带有注释的脚本例子。
#!/bin/sed -f
#mix.sed
#This is the change on line 1
1 c\
The Dibble hand were grooving
#Let's now insert one line
/evening/ i\
They played some great tunes.
#Change the last line ,a $ means last line
$ c\
Nurse Neave was too tipsy to help
#Stick in a new line before the last line.
3 a\Where was the nurse to help
运行结果如下:
The Dibble hand were grooving
They played some great tunes.
It was an evening of splendid music and company.
Too bad the disco floor fell through at 23:10.
Where was the nurse to help
Nurse Neave was too tipsy to help

10.4.15 删除文本
sed删除文本格式:
[address[,address]]d
地址可以是行的范围或模式,让我们看几个例子。
删除第一行;1d意为删除第一行。
$sed '1d' quote.txt
删除第一到第三行:
$sed '1,3d' quote.txt
删除最后一行:
$sed '$d' quote.txt
也可以使用正则表达式进行删除操作。下面的例子删除包含文本Neave的行。
$sed '/Neave/d' quote.txt


10.4.16 替换文本
替换命令用替换模式替换指定模式,格式为:
[address[,address]]s/pattern-to-find/replacement-pattern/[gpwn]
s选项通知sed这是一个替换操作,并查询pattern-to-find,成功后用replacement-pattern替换它。
替换选项如下:
g: 缺省情况下只替换第一次出现模式,使用 g选项替换全局所有出现模式。
p:缺省sed将所有被替换行写入标准输出,加p选项将使-n选项无效.-n选项不打印输出p结果。
w 文件名: 使用此选项将输出定向到一个文件。
让我们看几个例子.替换night为NIGHT,首先查询模式night,然后用文本NIGHT替换它。
$sed 's/night/NIGHT/' quote.txt
The honeysuckle band played all NIGHT long for only $90.
It was an evening of splendid music and company.
Too bad the disco floor fell through at 23:10.
The local nurse Miss P.Neave was in attendance.
要从$90中删除$符号(记住这是一个特殊符号,必须用\屏蔽其特殊含义)在replacement-pattern部分不写任何东西,保留空白,但仍需要用斜线括起来.在sed中也可以这样删除一个字符串。
$sed 's/\$//' quote.txt
The honeysuckle band played all night long for only 90.
It was an evening of splendid music and company.
Too bad the disco floor fell through at 23:10.
The local nurse Miss P.Neave was in attendance.
要进行全局替换,即替换所有出现模式,只需在命令后加g选项,下面的例子将所有The替换成Wow!。
$sed 's/The/Wow!/g' quote.txt
Wow! honeysuckle band played all night long for only $90.
It was an evening of splendid music and company.
Too bad the disco floor fell through at 23:10.
Wow! local nurse Miss P.Neave was in attendance.
将替换结果写入一个文件用w选项,下面的例子将splendid替换为SPLENDID的替换结果
写入文件sed.out:
$sed 's/splendid/SPLENDID/w sed.out' quote.txt
The honeysuckle band played all night long for only $90.
It was an evening of SPLENDID music and company.
Too bad the disco floor fell through at 23:10.
The local nurse Miss P.Neave was in attendance.
注意要将文件名括在sed的单引号里。文件结果如下:
$cat ./sed.out
It was an evening of SPLENDID music and company.

10.5 使用替换修改字符串
如果要附加或修改一个字符串,可以使用(&)命令,&命令保存发现模式以便重新调用它,然后把它放在替换字符串里面.这里给出一个修改的设计思路.先给出一个被替换模式,然后是一个准备附加在第一个模式后的另一个模式,并且后面带有&,这样修改模式将放在匹配模式之前.例如sed语句s/nurse/"Hello" &/p 的结果如下:
$sed -n 's/nurse/"Hello" &/p' quote.txt
The local "Hello" nurse Miss P.Neave was in attendance.
原句是文本行The local nurse Miss P.Neave was in attendance.
记住模式中要使用空格,因为输出结果表明应加入空格。
还有一个例子:
$sed -n 's/played/from Hockering &/p' quote.txt
The honeysuckle band from Hockering played all night long for only $90.
原句是The honeysuckle band played all night long for only $90。相信这种修改动作已经讲
解得很清楚了。


10.6 将sed结果写入文件命令
像使用>文件重定向发送输出到一个文件一样,在sed命令中也可以将结果输入文件.格式有点像使用替换命令:
[address[,address]]w filename
'w'选项通知sed将结果写入文件.filename是自解释文件名.下面有两个例子。
$sed '1,2 w filedt' quote.txt
文件quote.txt输出到屏幕.模式范围即1,2行输出到文件filedt.
cat ./filedt
The honeysuckle band played all night long for only $90.
It was an evening of splendid music and company.
下面例子中查询模式Neave,匹配结果行写入文件dht.
$sed '/Neave/w dht' quote.txt
$cat ./dht
The local nurse Miss P.Neave was in attendance.


10.7 从文件中读文本
处理文件时,sed允许从另一个文件中读文本,并将其文本附加在当前文件.此命令放在模式匹配行后.格式为:
address r filename
这里r通知sed将从另一个文件源中读文本.filename是其文件名.
   现在创建一个小文件 sedex.txt,内容如下:
$cat sedex.txt
Boom boom went the music.
将sedex.txt内容附加到文件quote.txt的拷贝.在模式匹配行/company/后放置附加文本.本例为第三行.注意所读的文件名需要用单引号括起来.
$sed '/company./r sedex.txt' quote.txt 
The honeysuckle band played all night long for only $90.
It was an evening of splendid music and company.
Boom boom went the music
Too bad the disco floor fell through at 23:10.
The local nurse Miss P.Neave was in attendance.


10.8 匹配后退出
有时需要在模式匹配首次出现后退出sed,以便执行其他处理脚本.退出命令格式为:
address q
下面的例子假定查询模式/.a.*/,意为任意字符后跟字符a,再跟任意字符0次或任意多次。
查询首次出现模式,然后退出.需要将q放在sed语句末尾。
$sed '/.a.*/q' quote.txt
The honeysuckle band played all night long for only $90.
10.10 使用系统sed
前面已经讲述了sed的基本功能,但是在脚本或命令行中使用sed真正要做的是修改或删除文件或字符串中文本.下面运用前面学过的知识讲述这一点。


10.10.1 处理控制字符
使用sed实现的一个重要功能是在另一个系统中下载的文件中剔除控制字符.
下面是传送过来的文件(dos.txt)的部分脚本.必须去除所有可疑字符,以便于帐号所有者使用文件.
cat dos.txt
12232##DISO##45.12^M
00332##LPSO##23.11^M
01299##USPD##34.46^M
    可采取以下动作:
    1) 用一个空格替换所有的(##)符号.
    2) 删除起始域中最前面的0 (00).
    3) 删除行尾控制字符(^M).

一些系统中,回车符为^@和^L,如果遇到一些怪异的字符,不必担心,只要是在行尾并且全都相同就可以。
按步执行每一项任务,以保证在进行到下一任务前得到理想结果。使用输入文件dos.txt。
    任务1。删除所有的 #字符很容易,可以使用全局替换命令。这里用一个空格替换两个或
更多的#符号。
$sed 's/##*/ /g' dos.txt
12232 DISO 45.12^M
00332 LPSO 23.11^M
01299 USPD 34.46^M
    任务2。 删除所有行首的 0。使用^符号表示模式从行首开始,^0*表示行首任意个0。模式
s/^0*//g设置替换部分为空,即为删除模式,正是要求所在。
$sed 's/^0*//g' dos.txt
12232##DISO##45.12^M
332##LPSO##23.11^M
1299##USPD##34.46^M
    任务3.最后去除行尾^M符号,为此需做全局替换.设置替换部分为空.模式为:'s/\^m//g'
$sed 's/\^M//g' dos.txt
12232##DISO##45.12
00332##LPSO##23.11
01299##USPD##34.46
     分步测试预想功能对理解整个过程很有帮助。用sed在移到下一步前测试本步功能及结果
很重要。如果不这样,可能会有一大堆包含怪异字符的意料外的结果。
将所有命令结合在一起,使用管道将cat命令结果传入一系列sed命令,sed命令与上面几步精确过滤字符的sed相同。
$sed 's/##*/ /g' dos.txt|sed 's/^00*//g'|sed 's/\^M//g'
12232 DISO 45.12
332 LPSO 23.11
1299 USPD 34.46
现在文件对帐号管理者可用.
可以将命令放在文件里,然后运行它。下面即为转换脚本。
实现上述功能的sed脚本文件:
#!/bin/sed -f
#dos.sed
s/##*/ /g
s/^00*//g
s/\^M//g

$chmod u+x ./dos.sed
$./dos.sed dos.txt
12232 DISO 45.12
332 LPSO 23.11
1299 USPD 34.46


10.10.2 处理报文输出
当从数据库中执行语句输出时,一旦有了输出结果,脚本即可做进一步处理。通常先做一些整理,下面是一个sql查询结果。
Database        Size:(MB)       Data Created
------------------------------------

GOSOUTH         2244            12//11/97
TRISUD          5632            8/9/99

(2 rows affected)
为了使用上述输出信息做进一步自动处理,需要知道所存数据库名称,为此需执行以下操作:
    1) 使用s/-*//g删除横线------。
    2) 使用/^$/d删除空行。
    3) 使用$d删除最后一行
    4) 使用1d删除第一行。
    5) 使用awk {print $1}打印第一列。
    命令如下
$sed 's/--*//g' sql.txt|sed '/^$/d'|sed '1d'|sed '$d'|awk '{print $1}'
GOSOUTH
TRISUD


10.10.3 去除行首数字
对接下来的这个文件实施的操作是去除行首所有数字,每个记录应以 U N H或U N D开头,而不是 UNH或UND前面的数字。文件如下:
$cat UNE.txt
12345UND SPLLFC 234344
9999999UND SKKLT 3423
1UND SPLLY 434
使用基本正则表达式完成这个操作。[0-9]代表行首任意数字,替换部分为空格是为了确保删除前面的匹配模式,即数字。
$sed 's/^[0-9]*//g' UNE.txt
UND SPLLFC 234344
UND SKKLT 3423
UND SPLLY 434


10.10.4 附加文本
当帐户完成设置一个文件时,帐号管理者可能要在文件中每个帐号后面加一段文字,下面是此类文件的一部分:
$cat ok.txt
AC456
AC492169
AC9967
AC88345
任务是在每一行末尾加一个字符串'passed'.
使用$命令修改各域会使工作相对容易些。首先需要匹配至少两个或更多的数字重复出现,这样将所有的帐号加进匹配模式。
$sed 's/[0-9][0-9]$/& Passed/g' ok.txt
AC456 Passed
AC492169 Passed
AC9967 Passed
AC88345 Passed
也可以用如下命令实现:
$sed 's/.*/& Passed/g' ok.txt

10.10.5 从shell向sed传值
要从命令行中向sed传值,值得注意的是用双引号,否则功能不执行.
#name="It's a go situation"
#replace="GO"
#`echo $name|sed "s/go/$replace/g"`
It's a GO situation


10.10.6 从sed输出中设置shell变量
从sed输出中设置shell变量是一个简单的替换过程.运用上面的例子,创建shell变量new-name,保存上述 sed例子的输出结果。
#name="It's a go situation"
#replace="GO"
#new_name=`echo $name|sed "s/go/$replace/g"`
#echo $new_name
It's a GO situation
10.11 快速一行命令
下面是一些一行命令集。[]表示空格, [ ]表示tab键)
-------------------------------------------------------------------------------------                             
           's/\.$//g'           删除以句点结尾行
           '-e /abcd/d'         删除包含abcd的行
           's/[][][]*/[]/g'     删除一个以上空格,用一个空格代替
           's/^[][]*//g,        删除行首空格
           's/\.[][]*/[]/g'     删除句点后跟两个或更多空格,代之以一个空格
           '/^$/d'              删除空行
           's/^.//g'            删除第一个字符
           's/COL\(...\)//g'    删除紧跟COL的后三个字母
           's/^\///g'           从路径中删除第一个 \
           's/[]/[]//g'         删除所有空格并用tab键替代
           'S/^[]//g'           删除行首所有tab键
           's/[]*//g'           删除所有tab键
-------------------------------------------------------------------------------------


下面是一些实例

   
1. 删除路径名第一个/符号
   将当前工作目录返回给 sed,删除第一个/
cd /usr/local
$pwd|sed 's/^\///g'
usr/local
   
2. 追加/插入文本
   将"Mr Willis"字串返回给 sed并在Mr后而追加"Bruce"。
$echo "Mr Willis"|sed 's/Mr/& Bruce/'
Mr Bruce Willis

3. 删除首字符
   sed删除字符串“accounts.doc”首字符。
$echo "accounts.doc"|sed 's/^.//'
ccounts.doc

4. 删除文件扩展名
   sed删除“accounts.doc”文件扩展名。
$echo "accounts.doc"|sed 's/\.doc$//'
accounts

5. 增加文件扩展名
   sed附加字符串“.doc”到字符串“accounts”
$echo "accounts"|sed 's/.$/.doc/'
accounts.doc

6. 替换字符系列
   如果变量x含有下列字符串:
$x="Department+payroll%Building G"
$echo $x
Department+payroll%Building G

   如果要实现下列转换:
   + to ' of '
   % to ' located '
   sed命令是:
$echo $x|sed 's/+/ of /g'|sed 's/\%/ located /g'
Department of payroll located Building G

你可能感兴趣的:(sed用法介绍)