shell基础:sed
sed 用法介绍
s e d是一个非交互性文本流编辑器。它编辑文件或标准输入导出的文本拷贝。
" 抽取域。
" 匹配正则表达式。
" 比较域。
" 增加、附加、替换。
" 基本的s e d命令和一行脚本。
可以在命令行输入s e d命令,也可以在一个文件中写入命令,然后调用s e d,这与a w k基本相同。使用s e d需要记住的一个重要事实是,无论命令是什么, s e d并不与初始化文件打交道,它操作的只是一个拷贝,然后所有的改动如果没有重定向到一个文件,将输出到屏幕。
因为s e d是一个非交互性编辑器,必须通过行号或正则表达式指定要改变的文本行。
本文介绍s e d用法和功能。本章大多编写的是一行命令和小脚本。这样做可以慢慢加深对s e d用法的了解,取得宝贵的经验,以便最终自己编出大的复杂s e d脚本。
和grep与awk一样, sed是一种重要的文本过滤工具,或者使用一行命令或者使用管道与g r e p与a w k相结合。
可以在命令行输入sed命令,也可以在一个文件中写入命令,然后调用sed,这与awk基本相同。使用sed需要记住的一个重要事实是,无论命令是什么,sed并不与初始化文件打交道,它操作的只是一个拷贝,然后所有的改动如果没有重定向到一个文件,将输出到屏幕。
因为sed是一个非交互性编辑器,必须通过行号或正则表达式指定要改变的文本行。
本文介绍sed用法和功能。本章大多编写的是一行命令和小脚本。这样做可以慢慢加深对sed用法的了解,取得宝贵的经验,以便最终自己编出大的复杂sed脚本。
和grep与awk一样, sed是一种重要的文本过滤工具,或者使用一行命令或者使用管道与grep与awk相结合。
1 sed怎样读取数据
s e d从文件的一个文本行或从标准输入的几种格式中读取数据,将之拷贝到一个编辑缓冲区,然后读命令行或脚本的第一条命令,并使用这些命令查找模式或定位行号编辑它。重复此过程直到命令结束。
2 调用sed
调用s e d有三种方式:在命令行键入命令;将s e d命令插入脚本文件,然后调用s e d;将s e d命令插入脚本文件,并使s e d脚本可执行。
使用s e d命令行格式为:
- sed [选项] s e d命令输入文件。
记住在命令行使用s e d命令时,实际命令要加单引号。s e d也允许加双引号。
使用s e d脚本文件,格式为:
- sed [选项] -f sed脚本文件输入文件
要使用第一行具有s e d命令解释器的s e d脚本文件,其格式为:
- s e d脚本文件[选项] 输入文件
不管是使用s h e l l命令行方式或脚本文件方式,如果没有指定输入文件, s e d从标准输入中接受输入,一般是键盘或重定向结果。
s e d选项如下:
n 不打印;sed不写编辑行到标准输出,缺省为打印所有行(编辑和未编辑)。p命令可以用来打印编辑行。
c 下一命令是编辑命令。使用多项编辑时加入此选项。如果只用到一条sed命令,此选项无用,但指定它也没有关系。
f 如果正在调用s e d脚本文件,使用此选项。此选项通知sed一个脚本文件支持所有的s e d命令,例如:sed -f myscript.sed input_file,这里myscript.sed即为支持sed命令的文件。
2.1 保存sed输出
由于不接触初始化文件,如果想要保存改动内容,简单地将所有输出重定向到一个文件即可。下面的例子重定向s e d命令的所有输出至文件‘ myoutfile’,当对结果很满意时使用这种方法。
- $sed 'some-sed-commands' input-file > myoutfile
2.2 使用sed在文件中查询文本的方式
sed浏览输入文件时,缺省从第一行开始,有两种方式定位文本:
- 使用行号,可以是一个简单数字,或是一个行号范围。
2 ) 使用正则表达式
下面是使用s e d定位文本的一些方式。
- 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 !
2.3 基本sed编辑命令
- sed编辑命令
- p 打印匹配行
- = 显示文件行号
- a \ 在定位行号后附加新文本信息
- i \ 在定位行号后插入新文本信息
- d 删除定位行
- c \ 用新文本替换定位文本
- s 使用替换模式替换相应模式
- r 从另一个文件中读文本
- w 写文本到一个文件
- q 第一个模式匹配完成后推出或立即推出
- l 显示与八进制A S C I I代码等价的控制字符
- { } 在定位行执行的命令组
- n 从另一个文件中读文本下一行,并附加在下一行
- g 将模式2粘贴到/pattern n/
- y 传送字符
- n 延续到下一输入行;允许跨行的模式匹配语句
sed和正则表达式
s e d识别任何基本正则表达式和模式及其行匹配规则。记住规则之一是:如果要定位一特殊字符,必须使用( \)屏蔽其特殊含义
sed例子中使用下述文本文件quote.txt。(示例文件)
- [sam@Linux_chenwy sam]$ 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:00.
- The local nurse Miss P.Neave was in attendance.
1 显示行
只打印第二行,用-n
- [sam@Linux_chenwy sam]$ sed -n '2p' quote.txt
- It was an evening of splendid music and company.
2 打印范围
可以指定行的范围,现打印1到3行,用逗号分隔行号。
- [sam@Linux_chenwy sam]$ 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:00.
3 打印模式
假定要匹配单词The,并打印此行,方法如下。使用模式/pattern/格式,这里为/The/。
- [sam@Linux_chenwy sam]$ 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.
4 使用模式和行号进行查询
可以将行号和模式结合使用。假定要改动文件quote.txt最后一行中的单词the,使用sed查询the,返回两行:
- [sam@Linux_chenwy sam]$ 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.
使用模式与行号的混合方式可以剔除第一行,格式为l i n e _ n u m b e r, / p a t t e r n /。逗号用来分隔行号与模式开始部分。为达到预期结果,使用4 , / t h e /。意即把本行及后面的行的全部打印出来
- [sam@Linux_chenwy sam]$ sed -n '4,/The/p' quote.txt
- The local nurse Miss P.Neave was in attendance.
5 匹配元字符
匹配元字符/ p。
- [sam@Linux_chenwy sam]/p' quote.txt
- The honeysuckle band played all night long for only $90.
6 显示整个文件
要打印整个文件,只需将行范围设为第一行到最后一行1 , 意为最后一行。
- [sam@Linux_chenwy sam]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:00.
- The local nurse Miss P.Neave was in attendance.
7 任意字符
匹配任意字母,后跟任意字母的0次或多次重复,并以i n g结尾,模式为/.*ing/。可以使用这个模式查询以i n g结尾的任意单词。
- [sam@Linux_chenwy sam]$ sed -n '/.*ing/p' quote.txt
- It was an evening of splendid music and company.
8 首行
要打印文件第一行,使用行号:
- [sam@Linux_chenwy sam]$ sed -n '1p' quote.txt
- The honeysuckle band played all night long for only $90.
9 最后一行
要打印最后一行,使用是代表最后一行的元字符。
- [sam@Linux_chenwy sam]p' quote.txt
- The local nurse Miss P.Neave was in attendance.
10 打印行号
要打印行号,使用等号=。打印模式匹配的行号,使用格式/pattern/=。
- [sam@Linux_chenwy sam]$ 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:00.
- The local nurse Miss P.Neave was in attendance.
整个文件都打印出来,并且匹配行打印了行号。如果只关心实际行号,使用- n选项。
- [sam@Linux_chenwy sam]$ sed -n '/music/=' quote.txt
- 2
如果只打印行号及匹配行,必须使用两个s e d命令,并使用e选项。第一个命令打印模式匹配行,第二个使用=选项打印行号,格式为sed -n -e /pattern/p -e /pattern/=
- [sam@Linux_chenwy sam]$ sed -n -e '/music/p' -e '/music/=' quote.txt
- It was an evening of splendid music and company.
- 2
11 附加文本
要附加文本,使用符号a \,可以将指定文本一行或多行附加到指定行。如果不指定文本放置位置, s e d缺省放在每一行后面。附加文本时不能指定范围,只允许一个地址模式。文本附加操作时,结果输出在标准输出上。注意它不能被编辑,因为s e d执行时,首先将文件的一行文本拷贝至缓冲区,在这里s e d编辑命令执行所有操作(不是在初始文件上),因为文本直接输出到标准输出,s e d并无拷贝。
要想在附加操作后编辑文本,必须保存文件,然后运行另一个s e d命令编辑它。这时文件的内容又被移至缓冲区。
附加操作格式如下:
- [address]a\
- text\
- text\
- ......
- text
地址指定一个模式或行号,定位新文本附加位置。a\ 通知s e d对a \后的文本进行实际附加操作。观察格式,注意每一行后面有一斜划线,这个斜划线代表换行。s e d执行到这儿,将创建一新行,然后插入下一文本行。最后一行不加斜划线, s e d假定这是附加命令结尾。
当附加或插入文本或键入几个s e d命令时,可以利用辅助的s h e l l提示符以输入多行命令。当附加或插入文本或键入几个s e d命令时,可以利用辅助的s h e l l提示符以输入多行命令。
创建sed脚本文件
创建脚本文件append.sed:
第一行是sed命令解释行。脚本在这一行查找s e d以运行命令,这里定位在/ b i n。
第二行以/ c o m p a n y /开始,这是附加操作起始位置。a \通知s e d这是一个附加操作,首先应插入一个新行。
第三行是附加操作要加入到拷贝的实际文本。
输出显示附加结果。如果要保存输出,重定向到一个文件。
- [sam@chenwy sam]$ cat append.sed
-
!/bin/sed -f
- /company/ a\
- Then suddenly it happed.
保存它,增加可执行权限,运行
- [sam@chenwy sam]chmod u+x append.sed
- [sam@chenwy sam]$ ./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 happed.
- Too bad the disco floor fell through at 23:00.
- The local nurse Miss P.Neave was in attendance.
或直接用命令行:
- [sam@chenwy sam]$ sed "/company/a\Then suddenly it happened." 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.
- Too bad the disco floor fell through at 23:00.
- The local nurse Miss P.Neave was in attendance
插入文本:
插入命令类似于附加命令,只是在指定行前面插入。和附加命令一样,它也只接受一个地址。
如在a t t e n d a n c e结尾的行前插入文本utter confusion followed。
- [sam@chenwy sam]$ sed "/company/i\Utter confusion followed." quote.txt
也可以指定行:
- [sam@chenwy sam]$ cat insert.sed
-
!/bin/sed -f
- 4 i\
- Utter confusion followed.
执行结果
- [sam@chenwy sam]$ chmod u+x insert.sed
- [sam@chenwy sam]$ ./insert.sed 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:00.
- Utter confusion followed.
- The local nurse Miss P.Neave was in attendance.
修改文本
修改命令将在匹配模式空间的指定行用新文本加以替代,格式如下:
-
[sam@chenwy sam]$ cat change.sed
-
!/bin/sed -f
-
3 c\
-
The office Dibble band played well.
-
[sam@chenwy sam]$ chmod u+x change.sed
-
[sam@chenwy sam]$ ./change.sed quote.txt
-
The honeysuckle band played all night long for only $90.
-
It was an evening of splendid music and company.
-
The office Dibble band played well.
-
The local nurse Miss P.Neave was in attendance.
将第一行The honeysuckle band played all night long for only $90替换为The office Di b b l e band played well。首先要匹配第一行的任何部分,可使用模式‘ / H o n e y s u c k l e /’。s e d脚本文件为c h a n g e . s e d。内容如下:
或命令行:
- [sam@chenwy sam]$ sed "/honeysuck/c\The Office Dibble band played well." quote.txt
- The Office Dibble band played well.
- It was an evening of splendid music and company.
- Too bad the disco floor fell through at 23:00.
- The local nurse Miss P.Neave was in attendanc
可以对同一个脚本中的相同文件进行修改、附加、插入三种动作匹配和混合操作。
-
[sam@chenwy sam]$ cat mix.sed
-
!/bin/sed -f
-
1 c\
-
The Dibble band were grooving.
-
/evening/ i\
-
They played some great tunes.
-
3 a\
-
Where was the nurse to help?
-
[sam@chenwy sam]$ chmod u+x mix.sed
-
[sam@chenwy sam]$ ./mix.sed quote.txt
-
The Dibble band 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:00.
-
Where was the nurse to help?
-
The local nurse Miss P.Neave was in attendance.
删除文本
s e d删除文本格式:
- [ a d d r e s s [,a d d r e s s ] ] d
删除第一行;1 d意为删除第一行。
- [sam@chenwy sam]$ sed '1d' quote.txt
- It was an evening of splendid music and company.
- Too bad the disco floor fell through at 23:00.
- The local nurse Miss P.Neave was in attendance.
删除第一到第三行:
- [sam@chenwy sam]$ sed '1,3d' quote.txt
- The local nurse Miss P.Neave was in attendance.
删除最后一行:
- [sam@chenwy sam]d' 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:00.
也可以使用正则表达式进行删除操作。下面的例子删除包含文本‘ N e a v e’的行。
- [sam@chenwy sam]$ sed '/Neave/d' 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:00.
替换文本
替换命令用替换模式替换指定模式,格式为:
- [ a d d r e s s [,address]] s/ pattern-to-find /replacement-pattern/[g p w n]
s选项通知s e d这是一个替换操作,并查询pattern-to-find,成功后用replacement-pattern替换它。
替换选项如下:
g 缺省情况下只替换第一次出现模式,使用g选项替换全局所有出现模式。
p 缺省s e d将所有被替换行写入标准输出,加p选项将使- n选项无效。- n选项不打印输出结果。
w 文件名使用此选项将输出定向到一个文件。
如替换night为NIGHT,首先查询模式night,然后用文本NIGHT替换它。
- [sam@chenwy sam]$ 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:00.
- The local nurse Miss P.Neave was in attendance.
要从 符号(记住这是一个特殊符号,必须用\ 屏蔽其特殊含义),在replacement-pat tern部分不写任何东西,保留空白,但仍需要用斜线括起来。在sed中也可以这样删除一个字符串。
- [sam@chenwy sam]//' 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:00.
- The local nurse Miss P.Neave was in attendance.
要进行全局替换,即替换所有出现模式,只需在命令后加g选项。下面的例子将所有T h e替换成Wo w!。
- [sam@chenwy sam]$ 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:00.
- Wow! local nurse Miss P.Neave was in attendance.
将替换结果写入一个文件用w选项,下面的例子将splendid替换为SPLENDID的替换结果写入文件sed .ou t:
- [sam@chenwy sam]$ 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:00.
- The local nurse Miss P.Neave was in attendance.
注意要将文件名括在s e d的单引号里。文件结果如下:
- [sam@chenwy sam]$ cat sed.out
- It was an evening of SPLENDID music and company.
使用替换修改字符串
如果要附加或修改一个字符串,可以使用(&)命令,&命令保存发现模式以便重新调用它,然后把它放在替换字符串里面。
先给出一个被替换模式,然后是一个准备附加在第一个模式后的另一个模式,并且后面带有&,这样修改模式将放在匹配模式之前。
例如, s e d语句s/nurse/"Hello"&/p 的结果如下
- [sam@chenwy sam]$ 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。
记住模式中要使用空格,因为输出结果表明应加入空格。
还有一个例子:
- [sam@chenwy sam]$ 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。
将sed结果写入文件命令
像使用>文件重定向发送输出到一个文件一样,在sed命令中也可以将结果输入文件。格式有点像使用替换命令:
- [address[address]]w filename
‘w’选项通知sed将结果写入文件。filename是自解释文件名。
下面有两个例子。
- [sam@chenwy sam]$ sed '1,2 w filedt' quote.txt 将quota.txt文件的前两行写入到文件filedt里
- 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:00.
- The local nurse Miss P.Neave was in attendance.
文件q u o t e . t x t输出到屏幕。模式范围即1,2行输出到文件f i l e d t。 - [sam@chenwy sam]$ cat filedt
- The honeysuckle band played all night long for only $90.
- It was an evening of splendid music and company.
下面例子中查询模式Neave,匹配结果行写入文件filedht。
-
[sam@chenwy sam]$ sed '/Neave/ w dht' 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:00.
-
The local nurse Miss P.Neave was in attendance.
-
[sam@chenwy sam]$ cat dht
-
The local nurse Miss P.Neave was in attendance.
从文件中读文本
处理文件时, sed允许从另一个文件中读文本,并将其文本附加在当前文件。此命令放在模式匹配行后,格式为:
- address r filename
这里r通知s e d将从另一个文件源中读文本。f i l e n a m e是其文件名。
现在创建一个小文件s e d e x . t x t,内容如下:
- [sam@chenwy sam]$ echo "Boom boom went the music" >sedex.txt
- [sam@chenwy sam]$ cat sedex.txt
- Boom boom went the music
将s e d e x . t x t内容附加到文件q u o t e . t x t的拷贝。在模式匹配行/ c o m p a n y /后放置附加文本。本例为第三行。注意所读的文件名需要用单引号括起来。
- [sam@chenwy sam]$ 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:00.
- The local nurse Miss P.Neave was in attendance.
匹配后退出
有时需要在模式匹配首次出现后退出s e d,以便执行其他处理脚本。退出命令格式为:
- address q
下面的例子假定查询模式/ . a . * /,意为任意字符后跟字符a,再跟任意字符0次或任意多次。
查询首次出现模式,然后退出。需要将q放在s e d语句末尾。
- [sam@chenwy sam]$ sed '/.a.*/q' quote.txt
- The honeysuckle band played all night long for only $90.
显示文件中的控制字符
1、$vi dos.txt
进入vi后,用ctrl+v 再用ctrl+M产生控制字符^M不知对不对
使用cat -v filename命令查看编辑好的文件
[sam@chenwy sam]$ cat -v dos.txt
12332##DISO##45.12^M
00332##LPSO##23.14^M
01299##USPD##34.46^M
s e d格式为:
[ a d d r e s s,[ a d d r e s s ] ] l
‘l’意为列表。一般情况下要列出整个文件,而不是模式匹配行,因此使用l要从第一到最后一行。模式范围1, sed -n '1,
00332##LPSO##23.14\r
处理控制字符
使用s e d实现的一个重要功能是在另一个系统中下载的文件中剔除控制字符。
下面是传送过来的文件( d o s . t x t)的部分脚本。必须去除所有可疑字符,以便于帐号所有者使用文件。
删除所有的#字符很容易,可以使用全局替换命令。这里用一个空格替换两个或
更多的#符号。
[sam@chenwy sam]$ sed 's/##/ /g' dos.txt
12332 DISO 45.12
00332 LPSO 23.14
01299 USPD 34.46
删除所有行首的0。使用^符号表示模式从行首开始, ^ 0 表示行首任意个0。模式s / ^ 0 * / / g设置替换部分为空,即为删除模式,正是要求所在。
[sam@chenwy sam]$ sed 's/##/ /g;s/^0/ /g' dos.txt
12332 DISO 45.12
332 LPSO 23.14
1299 USPD 34.46
最后去除行尾^ M符号,为此需做全局替换。设置替换部分为空。模式为:
‘s / ^ m / / g’,注意‘^ M’,这是一个控制字符。
在命令行里也必须用^M控制字符耶!?
[sam@chenwy sam] cat dos.txt | sed 's/^0*/ /g' | sed 's/^M/ /g' | sed 's/##/ /g'
处理报文输出
当从数据库中执行语句输出时,一旦有了输出结果,脚本即可做进一步处理。通常先做一些整理,下面是一个s q l查询结果。
- [sam@chenwy sam]$ cat data.txt
- Database Size(MB) DataCreated
- GOSOUTH 2244 12/11/97
- TRISUD 5632 8/9/99
- (2 rows affected)
为了使用上述输出信息做进一步自动处理,需要知道所存数据库名称,为此需执行以下
操作:
- 使用s / - * / / g删除横线- - - - - -。
- 使用/ ^ $ / d删除空行。
- 使用$ d删除最后一行
- 使用1 d删除第一行。
- 使用awk {print $1}打印第一列。
命令如下,这里使用了c a t,并管道传送结果到s e d命令。
- [sam@chenwy sam]/d' | sed '1}'
- GOSOUTH
- TRISUD
附加文本
当帐户完成设置一个文件时,帐号管理者可能要在文件中每个帐号后面加一段文字,下面是此类文件的一部分:
- [sam@chenwy sam]$ cat ok.txt
- AC456
- AC492169
- AC9967
- AC88345
任务是在每一行末尾加一个字符串‘ p a s s e d’。
使用$命令修改各域会使工作相对容易些。首先需要匹配至少两个或更多的数字重复出现,这样将所有的帐号加进匹配模式。
- [sam@chenwy sam]$ sed 's/[0-9][0-9]*/& Passed/g' ok.txt
- AC456 Passed
- AC492169 Passed
- AC9967 Passed
- AC88345 Passed
从shell向sed传值
要从命令行中向s e d传值,值得注意的是用双引号,否则功能不执行。
- [sam@chenwy sam]$ NAME="It's a go situation"
- [sam@chenwy sam]$ REPLACE="GO"
- [sam@chenwy sam]NAME | sed "s/go/$REPLACE/g"
- It's a GO situation
从sed输出中设置shell变量
从s e d输出中设置s h e l l变量是一个简单的替换过程。运用上面的例子,创建s h e l l变量N E W- N A M E,保存上述s e d例子的输出结果。
- [sam@chenwy sam]$ NAME="It's a go situation"
- [sam@chenwy sam]$ REPLACE="GO"
- [sam@chenwy sam]NAME | sed "s/go/$REPLACE/g"` 定义新变量
- [sam@chenwy sam]NEW_NAME
- It's a GO situation
这里的是键盘左上角那个
下面是一些一行命令集。([ ]表示空格, [ ]表示t a b键)
‘s / \ . / d’ 删除空行
‘s / ^ . / / g’ 删除第一个字符
‘s /CO L \ ( . . . \ ) / / g’ 删除紧跟C O L的后三个字母
‘s / ^ \ / / / g’ 从路径中删除第一个
‘s / [ ] / [ ] / / g’ 删除所有空格并用t a b键替代
‘S / ^ [ ] / / g’ 删除行首所有t a b键
‘s / [ ] * / / g’ 删除所有t a b键
- 删除路径名第一个\符号
将当前工作目录返回给s e d,删除第一个\: - [sam@chenwy sam]PWD |sed 's/^///g'
- usr/sam
- 追加/插入文本
将"Mr Wi l l i s "字串返回给s e d并在M r后而追加" B r u c e "。 - [sam@chenwy sam]$ echo "Mr Willis" |sed 's/Mr /& Bruce/g'
- Mr BruceWillis
- 删除首字符
s e d删除字符串“a c c o u n t s . d o c”首字符。 - [sam@chenwy sam]$ echo "accounts.doc" |sed 's/^.//g'
- ccounts.doc
- 删除文件扩展名
s e d删除“a c c o u n t s . d o c”文件扩展名。 - [sam@chenwy sam]$ echo "accounts.doc"|sed 's/.doc//g'
- accounts
- 增加文件扩展名
s e d附加字符串“. d o c”到字符串“a c c o u n t s”。 - [sam@chenwy sam]/.doc/g'
- accounts.doc
- 替换字符系列
如果变量x含有下列字符串: - [sam@chenwy sam]$ x="Department+playroll&Building G"
- [sam@chenwy sam]x
- Department+playroll&Building G
如果要加入of,located,并去掉+,&实现下列转换: - [sam@chenwy sam]x |sed 's/+/ of /g' |sed 's/&/ Located at /g'
- Department of playroll Located at Building G
把+用 of 替换,&用located at 替换
网友评论