ºìÁªLinuxÃÅ»§
Linux°ïÖú

SED ÊÖ²á

·¢²¼Ê±¼ä:2007-04-03 09:37:27À´Ô´:ºìÁª×÷Õß:chameleon
SED ÊÖ²á



ÖÐÑëÑо¿Ôº¼ÆËãÖÐÐÄ
ASPAC ¼Æ»®
aspac@phi.sinica.edu.tw
¼¼Êõ±¨¸æ: 96005
1996Äê12ÔÂ1ÈÕ
Version:1.0

Ŀ¼£º

°æÈ¨ÉùÃ÷

1. Introduction
ºÎʱʹÓà sed
ºÎ´¦»ñµÃ sed
sed ÄÜ×öÄÇЩ±à¼­¶¯×÷
sed ÈçºÎ¹¤×÷

ʹÓà sed
Ö´ÐÐÃüÁîÁÐÉϵı༭ָÁî
sed µÄ±à¼­Ö¸Áî
µØÖ·(address)²ÎÊýµÄ±íʾ·¨
ÓÐÄÇЩº¯Êý²ÎÊý
Ö´Ðеµ°¸Äڵı༭ָÁî
Ö´Ðжà¸öÎļþ?µÄ±à¼­
Ö´ÐÐÊä³öµÄ¿ØÖÆ

·¶Àý
Ìæ»»ÎļþÖеÄÊý¾Ý
°á¶¯ÎļþÖеÄÊý¾Ý
ɾ³ýÎļþÖеÄÊý¾Ý
ËÑѰÎļþÖеÄÊý¾Ý

½éÉܺ¯Êý²ÎÊý
s
d
a
i
c
p
l
r
w
y
!
n
q
=
#
N
D
P
h
H
g
G
x
b
t

¸½Â¼ A : ³£ÓÃµÄ regular expression

¸½Â¼ B : HP-UX Release 9.01 Óë SunOS 5.4 ÄÚ sed ¶Ô regular expression Öи÷ÖÖÌØÊâ×Ö·ûµÄ½ÓÊÜÄÜÁ¦
²Î¿¼Êý¾Ý
Åú×¢


1.Introduction
Sed(Stream EDitor)Ϊ UNIX ϵͳÉÏÌṩ½«±à¼­¹¤×÷×Ô¶¯»¯µÄ±à¼­Æ÷ , ʹÓÃÕßÎÞÐèÖ±½Ó±à¼­Êý¾Ý¡£Ê¹ÓÃÕß¿ÉÀûÓà sed ËùÌṩ 20 ¶àÖÖ²»Í¬µÄº¯Êý²ÎÊý , ×éºÏ(Åú×¢ [1])ËüÃÇÍê³É²»Í¬µÄ±à¼­¶¯×÷¡£´ËÍâ , ÓÉÓÚ sed ¶¼ÒÔÐÐΪµ¥Î»±à¼­Îļþ , ¹ÊÆäÒàÊÇÐб༭Æ÷(line editor)¡£
Ò»°ã sed ×î³£ÓÃÔڱ༭ÄÇЩÐèÒª²»¶ÏÖØ¸´Ä³Ð©±à¼­¶¯×÷µÄµµÉÏ , ÀýÈ罫ÎļþÖеÄij¸ö×Ö·û´®Ìæ»»³ÉÁíÒ»¸ö×Ö·û´®µÈµÈ¡£ÕâЩÏà½ÏÓÚÒ»°ã UNIX ±à¼­Æ÷(½»Ì¸Ê½µÄ, Èç vi¡¢emacs)ÓÃÊÖ¶¯µÄ·½Ê½ÐÞ¸Ä? , sed ÓÃÆðÀ´½ÏÊ¡Á¦¡£ÏÂÃæ¼¸½Ú½«·Ö±ð½éÉÜ:

ºÎʱʹÓà sed
ºÎ´¦»ñµÃ sed
sed ÄÜ×öÄÇЩ±à¼­¶¯×÷
sed ÈçºÎ¹¤×÷
1.1 ºÎʱʹÓà sed
ÔÚÐÞ¸Ä?ʱ , Èç¹û²»¶ÏµØÖظ´Ä³Ð©±à¼­¶¯×÷ , Ôò¿ÉÓà sed ×Ô¶¯Ò»´ÎÖ´ÐÐÕâЩ±à¼­¶¯×÷¡£ÀýÈçҪʹ received ÎļþÄÚ 1000 ·âµç×ÓÐżþÄڵķ¢ÐÅÈËÊôÃû "Tom" ¸Ä³É "John" , ´ËʱֻҪÔÚÃüÁîÁÐÉÏÖ´ÐÐÒ»¼òµ¥µÄ sed ÃüÁî¾Í¿É°Ñ?ÄÚËùÓÐµÄ "Tom" ×Ö·û´®Ìæ»»³É "John"¡£
ÔÙÕß , µ±?ÐèÒªÐí¶à²»Í¬±à¼­¶¯×÷ʱ , Ôò sed Ò»´Î¿ÉÖ´ÐÐÄÇЩ²»Í¬µÄ±à¼­¶¯×÷¡£ÀýÈç sed ÄÜÒ»´ÎÖ´ÐÐÍ꽫?ÖÐËùÓпհ×ÐÐɾ³ý¡¢Ìæ»»×Ö·û´®¡¢²¢½«Ê¹ÓÃÕßÊäÈëµÄÎÄ×ÖÌí¼ÓÔÚÎļþµÄµÚÁùÐеȵȲ»Í¬µÄ±à¼­¶¯×÷¡£


1.2 ºÎ´¦»ñµÃ sed
Ò»°ãµÄ UNIX ϵͳ , ±¾Éí¼´¸½ÓÐ sed¡£²»Í¬µÄ UNIX ϵͳËù¸½µÄ sed °æ±¾Ò಻¾¡Ïàͬ¡£Èô¶ÁÕßËùʹÓÃµÄ UNIX ϵͳÉÏδ¸½ÓÐ sed , Ôò¿É͸¹ý anonymous ftp µ½ÏÂÁеط½È¥È¡µÃ :
phi.sinica.edu.tw:/pub/GNU/gnu
gete.sinica.edu.tw:/unix/gnu
ftp.edu.tw:/UNIX/gnu
ftp.csie.nctu.edu.tw:/pub/Unix/GNU
ftp.fcu.edu.tw: /pub3/UNIX/gnu
axp350.ncu.edu.tw:/Packages/gnu
leica.ccu.edu.tw :/pub2/gnu
mail.ncku.edu.tw :/pub/unix/gnu
bbs.ccit.edu.tw :/pub1/UNIX/gnu
prep.ai.mit.edu.tw:/pub/gnu

1.3 sed ÄÜ×öÄÇЩ±à¼­¶¯×÷
sed ¿Éɾ³ý(delete)¡¢¸Ä±ä(change)¡¢Ìí¼Ó(append)¡¢²åÈë(insert)¡¢ºÏ²¢¡¢½»»»ÎļþÖеÄÊý¾ÝÐÐ , »ò¶ÁÈëÆäËüÎļþµÄÊý¾Ýµ½ÎļþÖÐ , Ò²¿ÉÌæ»»(substuite)ËüÃÇÆäÖеÄ×Ö·û´®¡¢»òת»»(tranfer)ÆäÖеÄ×ÖĸµÈµÈ¡£ÀýÈ罫?ÖеÄÁ¬Ðø¿Õ°×ÐÐɾ³ÉÒ»ÐС¢ "local" ×Ö·û´®Ìæ»»³É "remote" ¡¢"t" ×Öĸת»»³É "T"¡¢½«µÚ 10 ÐÐÊý¾ÝÓëµÚ 11 Êý¾ÝºÏ²¢µÈ¡£

1.4 sed ÈçºÎ¹¤×÷
ÈçͬÆäËü UNIX ÃüÁî , sed Óɱê×¼ÊäÈë¶ÁÈë±à¼­Îļþ²¢Óɱê×¼Êä³öËͳö½á¹û¡£ÏÂͼ±íʾ sed ½«×ÊÁÏÐÐ "Unix" Ìæ»»³É "UNIX" ,



ÔÚͼÖÐ , ÉÏ·½ standard input Ϊ±ê×¼ÊäÈë , ÊǶÁÈ¡Êý¾ÝÖ®´¦ ; standard output Ϊ±ê×¼Êä³ö , ÊÇËͳö½á¹ûÖ®´¦ ; Öмä sed ·½¿éµÄÏÂÃæÁ½¸öÐéÏß·½¿é±íʾ sed µÄ¹¤×÷Á÷³Ì¡£ÆäÖÐ , ×ó±ßÐéÏß·½¿é±íʾ sed ½«±ê×¼ÊäÈëÊý¾ÝÖÃÈë pattern space , ÓÒ±ßÐéÏß·½¿é±íʾ sed ½« pattern space Öб༭Íê±ÏºóµÄÊý¾ÝË͵½±ê×¼Êä³ö¡£

ÔÚÐéÏß·½¿éÖÐ , Á½¸öʵÏß·½¿é·Ö±ð±íʾ pattern space Óë sed script¡£ÆäÖÐ , pattern space Ϊһ»º³åÇø , ËüÊÇ sed ¹¤×÷³¡Ëù ; ¶ø sed script Ôò±íʾһ×éÖ´Ðеı༭ָÁî¡£

ÔÚͼÖÐ, ×ó±ßÐéÏß·½¿é "Unix" Óɱê×¼ÊäÈëÖÃÈë pattern space ; ½Ó×Å , ÔÚÓÒ±ßÐéÏß·½¿éÖÐ , sed Ö´ÐÐ sed script Öеı༭ָÁî s/Unix/UNIX/ (Åú×¢ [2]) , ½á¹û "Unix" ±»Ìæ»»³É "UNIX" , Ö®ºó , "UNIX" ÓÉ pattern space Ë͵½±ê×¼Êä³ö¡£


×ܺÏÉÏÊöËùÑÔ , µ± sed Óɱê×¼ÊäÈë¶ÁÈëÒ»ÐÐÊý¾Ý²¢·ÅÈë pattern space ʱ , sed ÒÀÕÕ sed script µÄ±à¼­Ö¸ÁîÖðÒ»¶Ô pattern space ÄÚµÄÊý¾ÝÖ´Ðб༭ , Ö®ºó , ÔÙÓÉ pattern space ÄڵĽá¹ûË͵½±ê×¼Êä³ö , ½Ó×ÅÔÙ½«ÏÂÒ»ÐÐÊý¾Ý¶ÁÈë¡£Èç´ËÖØ¸´Ö´ÐÐÉÏÊö¶¯×÷ , Ö±ÖÁ¶ÁÍêËùÓÐÊý¾ÝÐÐΪֹ¡£


ʹÓà sed
Sed ÃüÁîÁпɷֳɱ༭ָÁîÓëÎļþÎļþ²¿·Ý¡£ÆäÖÐ , ±à¼­Ö¸ÁÔð¿ØÖÆËùÓеı༭¹¤×÷ ; ??±íʾËù´¦ÀíµÄµµ°¸¡£sed µÄ±à¼­Ö¸Áî¾ùÓÉλַ(address)Ó뺯Êý(function)Á½²¿·Ý×é³É , ÆäÖÐ , ÔÚÖ´ÐÐʱ , sed ÀûÓÃËüµÄµØÖ·²ÎÊýÀ´¾ö¶¨±à¼­µÄ¶ÔÏó;¶øÓÃËüµÄº¯Êý²ÎÊý(Åú×¢[3])±à¼­¡£
´ËÍâ , sed ±à¼­Ö¸Áî , ³ýÁË¿ÉÔÚÃüÁîÁÐÉÏÖ´ÐÐ , Ò²¿ÉÔÚµµ°¸ÄÚÖ´ÐС£ÆäÖвî±ðÖ»ÊÇÔÚÃüÁîÁÐÉÏÖ´ÐÐʱ , Æäǰ±ØÐë¼ÓÉÏÑ¡Ïî -e ; ¶øÔÚµµ°¸(Åú×¢[4])ÄÚʱ , ÔòÖ»ÐèÔÚÆäÎļþÃûǰ¼ÓÉÏÑ¡Ïî -f¡£ÁíÍâ , sed Ö´Ðб༭ָÁîÊÇÒÀÕÕËüÃÇÔÚÃüÁîÁÐÉÏ»ò?ÄڵĴÎÐò¡£

ÏÂÃæ¸÷½Ú , ½«½éÉÜÖ´ÐÐÃüÁîÁÐÉϵı༭ָÁî ¡¢sed ±à¼­Ö¸Áî¡¢Ö´Ðеµ°¸Äڵı༭ָÁî¡¢Ö´Ðжà¸öµµ°¸µÄ±à¼­¡¢¼°Ö´ÐÐ sed Êä³ö¿ØÖÆ¡£

2.1 Ö´ÐÐÃüÁîÁÐÉϵı༭ָÁî
2.2 sed ±à¼­Ö¸Áî
2.3 Ö´Ðеµ°¸Äڵı༭ָÁî
2.4 Ö´Ðжà¸öµµ°¸µÄ±à¼­
2.5 Ö´ÐÐ sed Êä³ö¿ØÖÆ
2.1.Ö´ÐÐÃüÁîÁÐÉϵı༭ָÁî
µ±±à¼­Ö¸Áî(²ÎÕÕ[section 2.2])ÔÚÃüÁîÁÐÉÏÖ´ÐÐʱ , Æäǰ±ØÐë¼ÓÉÏÑ¡Ïî -e ¡£ÆäÃüÁî¸ñʽÈçÏ :
sed -e '±à¼­Ö¸Áî1' -e '±à¼­Ö¸Áî2' ... Îļþ?

ÆäÖÐ , ËùÓб༭ָÁî¶¼½ô½ÓÔÚÑ¡Ïî -e Ö®ºó , ²¢ÖÃÓÚÁ½¸ö " ' " ÌØÊâ×Ö·û¼ä¡£ÁíÍâ , ÃüÁîÉϱ༭ָÁîµÄÖ´ÐÐÊÇÓÉ×ó¶øÓÒ¡£

Ò»°ã±à¼­Ö¸Áî²»¶àʱ , ʹÓÃÕßͨ³£Ö±½ÓÔÚÃüÁîÉÏÖ´ÐÐËüÃÇ¡£ÀýÈç , ɾ³ý yel.dat ÄÚ 1 ÖÁ 10 ÐÐÊý¾Ý , ²¢½«ÆäÓàÎÄ×ÖÖÐµÄ "yellow" ×Ö·û´®¸Ä³É "black" ×Ö·û´®¡£´Ëʱ , ¿É½«±à¼­Ö¸ÁîÖ±½ÓÔÚÃüÁîÉÏÖ´ÐÐ , ÆäÃüÁîÈçÏ :

sed -e '1,10d' -e 's/yellow/black/g' yel.dat

ÔÚÃüÁîÖÐ , ±à¼­Ö¸Áî '1,10d'(Åú×¢[5])Ö´ÐÐɾ³ý 1 ÖÁ 10 ÐÐÊý¾Ý ; ±à¼­Ö¸Áî 's/yellow/black/g'(Åú×¢[6]) , "yellow" ×Ö·û´®Ìæ»»(substuite)³É "black" ×Ö·û´®¡£
2.2 sed µÄ±à¼­Ö¸Áî
sed ±à¼­Ö¸ÁîµÄ¸ñʽÈçÏ :
[address1[,address2]]function[argument]

ÆäÖÐ , µØÖ·²ÎÊý address1 ¡¢address2 ΪÐÐÊý»ò regular expression ×Ö·û´® , ±íʾËùÖ´Ðб༭µÄÊý¾ÝÐÐ ; º¯Êý²ÎÊý function[argument] Ϊ sed µÄÄÚ¶¨º¯Êý , ±íʾִÐеı༭¶¯×÷¡£
ÏÂÃæÁ½Ð¡½Ú , ½«×Ðϸ½éÉܵØÖ·²ÎÊýµÄ±íʾ·¨ÓëÓÐÄÄЩº¯Êý²ÎÊý¹©Ñ¡Ôñ¡£

2.2.1 µØÖ·(address)²ÎÊýµÄ±íʾ·¨
ʵ¼ÊÉÏ , µØÖ·²ÎÊý±íʾ·¨Ö»Êǽ«Òª±à¼­µÄÊý¾ÝÐÐ , ÓÃËüÃǵÄÐÐÊý»òÆäÖеÄ×Ö·û´®À´´úÌæ±íʾËüÃÇ¡£ÏÂÃæ¾Ù¼¸¸öÀý×Ó˵Ã÷(Ö¸Áî¶¼ÒÔº¯Êý²ÎÊý d(²ÎÕÕ[section4.2]) ΪÀý) :
ɾ³ýÎļþÄÚµÚ 10 ÐÐÊý¾Ý , ÔòÖ¸ÁîΪ 10d¡£
ɾ³ýº¬ÓÐ "man" ×Ö·û´®µÄÊý¾ÝÐÐʱ , ÔòÖ¸ÁîΪ /man/d¡£
ɾ³ýµµÄÚµÚ 10 Ðе½µÚ 200 ÐÐÊý¾Ý, ÔòÖ¸ÁîΪ 10,200d¡£
ɾ³ýµµÄÚµÚ 10 Ðе½º¬ "man" ×Ö·û´®µÄÊý¾ÝÐÐ , ÔòÖ¸ÁîΪ 10,/man/d¡£
½ÓÏÂÀ´ , ÒÔµØÖ·²ÎÊýµÄÄÚÈÝÓëÆä¸öÊýÁ½µã , ÍêÕû˵Ã÷Ö¸ÁîÖÐλַ²ÎÊýµÄ±íʾ·¨(ͬÑùÒ²ÒÔº¯Êý²ÎÊý d ΪÀý)¡£
µØÖ·²ÎÊýµÄÄÚÈÝ:
µØÖ·ÎªÊ®½øÖÆÊý : ´ËÊý×Ö±íʾÐÐÊý¡£µ±Ö¸ÁîÖ´ÐÐʱ , ½«¶Ô·ûºÏ´ËÐÐÊýµÄÊý¾ÝÖ´Ðк¯Êý²ÎÊýָʾµÄ±à¼­¶¯×÷¡£ÀýÈç , ɾ³ýÊý¾ÝÎļþÖÐµÄµÚ 15 ÐÐÊý¾Ý , ÔòÖ¸ÁîΪ 15d(²ÎÕÕ[section4.2])¡£ÆäÓàÀàÍÆ ,Èçɾ³ýÊý¾ÝÎļþÖÐµÄµÚ m ÐÐÊý¾Ý , ÔòÖ¸ÁîΪ md ¡£

µØÖ·Îª regular expression(²ÎÕÕ[¸½Â¼ A]):
µ±Êý¾ÝÐÐÖÐÓзûºÏ regular expression Ëù±íʾµÄ×Ö·û´®Ê± , ÔòÖ´Ðк¯Êý²ÎÊýָʾµÄ±à¼­¶¯×÷¡£ÁíÍâ , ÔÚ regular expression ǰºó±ØÐë¼ÓÉÏ "/"¡£ÀýÈçÖ¸ÁîΪ /t.*t/d , ±íʾɾ³ýËùÓк¬Á½ "t" ×ÖĸµÄÊý¾ÝÐС£ÆäÖÐ , "." ±íʾÈÎÒâ×Ö·û; "*" ±íʾÆäǰ×Ö·û¿ÉÖØ¸´ÈÎÒâ´Î , ËüÃǽáºÏ ".*" ±íʾÁ½ "t" ×Öĸ¼äµÄÈÎÒâ×Ö·û´®¡£

µØÖ·²ÎÊýµÄ¸öÊý : ÔÚÖ¸ÁîÖÐ , µ±Ã»ÓеØÖ·²ÎÊýʱ , ±íʾȫ²¿Êý¾ÝÐÐÖ´Ðк¯Êý²ÎÊýËùָʾµÄ±à¼­¶¯×÷; µ±Ö»ÓÐÒ»µØÖ·²ÎÊýʱ , ±íʾֻÓзûºÏµØÖ·µÄÊý¾ÝÐвű༭ ; µ±ÓÐÁ½¸öµØÖ·²ÎÊý , Èç address1,address2 ʱ , ±íʾ¶ÔÊý¾ÝÇøÖ´Ðб༭ , address1 ´ú±íÆðʼÊý¾ÝÐÐ , address2 ´ú±í½áÊø×ÊÁÏÐС£¶ÔÓÚÉÏÊöÄÚÈÝ , ÒÔÏÂÃæÀý×Ó×ö¾ßÌå˵Ã÷¡£

ÀýÈçÖ¸ÁîΪ

d

Æä±íʾɾ³ýÎļþÄÚËùÓÐÊý¾ÝÐС£
ÀýÈçÖ¸ÁîΪ

5d

Æä±íʾɾ³ýÎļþÄÚµÚÎåÐÐ×ÊÁÏ¡£
ÀýÈçÖ¸ÁîΪ

1,/apple/d

Æä±íʾɾ³ý×ÊÁÏÇø , ÓÉ?ÄÚµÚÒ»ÐÐÖÁÄÚÓÐ "apple" ×Ö·û´®µÄÊý¾ÝÐС£
ÀýÈçÖ¸ÁîΪ

/apple/,/orange/d

Æä±íʾɾ³ý×ÊÁÏÇø , ÓÉ?ÄÚº¬ÓÐ "apple" ×Ö·û´®ÖÁº¬ÓÐ "orange" ×Ö·û´®µÄÊý¾ÝÐÐ
2.2.2 ÓÐÄÇЩº¯Êý(function)²ÎÊý
ÏÂÒ³±íÖÙ½éÉÜËùÓÐ sed µÄº¯Êý²ÎÊý(²ÎÕÕ[chapter 4])µÄ¹¦ÄÜ¡£
º¯Êý²ÎÊý ¹¦ÄÜ
: label ½¨Á¢ script file ÄÚÖ¸ÁÏà²Î¿¼µÄλÖá£
# ½¨Á¢Åú×¢
{ } ¼¯ºÏÓÐÏàͬλַ²ÎÊýµÄÖ¸Áî¡£
! ²»Ö´Ðк¯Êý²ÎÊý¡£
= Ó¡³ö×ÊÁÏÐÐÊý( line number )¡£
a\ Ìí¼ÓʹÓÃÕßÊäÈëµÄÊý¾Ý¡£
b label ½«Ö´ÐеÄÖ¸ÁîÌøÖÁÓÉ : ½¨Á¢µÄ²Î¿¼Î»Öá£
c\ ÒÔʹÓÃÕßÊäÈëµÄÊý¾ÝÈ¡´úÊý¾Ý¡£
d ɾ³ýÊý¾Ý¡£
D ɾ³ý pattern space ÄÚµÚÒ»¸ö newline ×Öĸ \ ǰµÄÊý¾Ý¡£
g ¿½±´Êý¾Ý´Ó hold space¡£
G Ìí¼Ó×ÊÁÏ´Ó hold space ÖÁ pattern space ¡£
h ¿½±´Êý¾Ý´Ó pattern space ÖÁ hold space ¡£
H Ìí¼Ó×ÊÁÏ´Ó pattern space ÖÁ hold space ¡£
l Ó¡³ö l ×ÊÁÏÖÐµÄ nonprinting character Óà ASCII Âë¡£
i\ ²åÈëÌí¼ÓʹÓÃÕßÊäÈëµÄÊý¾ÝÐС£
n ¶ÁÈëÏÂÒ»±Ê×ÊÁÏ¡£
N Ìí¼ÓÏÂÒ»±Ê×ÊÁϵ½ pattern space¡£
p Ó¡³ö×ÊÁÏ¡£
P Ó¡³ö pattern space ÄÚµÚÒ»¸ö newline ×Öĸ \ ǰµÄÊý¾Ý¡£
q Ìø³ö sed ±à¼­¡£
r ¶ÁÈëËü?ÄÚÈÝ¡£
s Ìæ»»×Ö·û´®¡£
t label ÏÈÖ´ÐÐÒ»Ìæ»»µÄ±à¼­Ö¸Áî , Èç¹ûÌæ»»³ÉÅ£p>Ôò½«±à¼­Ö¸ÁîÌøÖÁ : label ´¦Ö´ÐС£
w д×ÊÁϵ½ËüÎļþÄÚ¡£
x ½»»» hold space Óë pattern space ÄÚÈÝ¡£
y ת»»(transform)×Ö·û¡£
ËäÈ» , sed Ö»ÓÐÉϱíËùÊö¼¸¸öÓµÓлù±¾±à¼­¹¦Äܵĺ¯Êý , µ«ÓÉÖ¸ÁîÖÐλַ²ÎÊýºÍÖ¸ÁîÓëÖ¸Áî¼äµÄÅäºÏ , Ò²ÄÜʹ sed Íê³É´ó²¿·ÝµÄ±à¼­ÈÎÎñ¡£
2.3 Ö´Ðеµ°¸Äڵı༭ָÁî
µ±Ö´ÐеÄÖ¸ÁîÌ«¶à , ÔÚÃüÁîÁÐÉÏ׫дÆðÀ´Ê®·Ö»ìÂÒ , ´Ëʱ , ¿É½«ÕâЩָÁîÕûÀí´¢´æÔÚµµ°¸(Æ©Èç?ÃûΪ script_file )ÄÚ , ÓÃÑ¡Ïî -f script_file , ÔòÈà sed Ö´ÐÐ script_file Äڵı༭ָÁî¡£ÆäÃüÁîµÄ¸ñʾÈçÏ :
sed -f script_file Îļþ?

ÆäÖÐ , Ö´ÐÐ script_file Äڱ༭ָÁîµÄ˳ÐòÊÇÓÉÉ϶øÏ¡£ÀýÈçÉÏÒ»½ÚµÄÀý×Ó , Æä¿É¸Ä³ÉÈçÏÂÃüÁî:
sed -f ysb.scr yel.dat

ÆäÖÐ , ysb.scr ?µÄÄÚÈÝÈçÏ :
1,10d
s/yellow/black/g

ÁíÍâ , ÔÚÃüÁîÁÐÉϿɻìºÏʹÓÃÑ¡Ïî -e Óë -f , sed Ö´ÐÐÖ¸Áî˳ÐòÒÀÈ»ÊÇÓÉÃüÁîÁеÄ×óµ½ÓÒ, ÈçÖ´ÐÐÖÁ -f ºóµµ°¸ÄÚµÄÖ¸Áî , ÔòÓÉÉ϶øÏÂÖ´ÐС£


2.4 Ö´Ðжà¸öÎļþ?µÄ±à¼­
ÔÚ sed ÃüÁîÁÐÉÏ , Ò»´Î¿ÉÖ´Ðб༭¶à¸ö?? , ËüÃǸúÔڱ༭ָÁîÖ®ºó¡£ÀýÈç , Ìæ»» white.dat¡¢red.dat¡¢black.dat ÎļþÄÚµÄ "yellow" ×Ö·û´®³É "blue" , ÆäÃüÁîÈçÏÂ:
sed -e 's/yellow/blue/g' white.dat red.dat black.dat

ÉÏÊöÃüÁîÖ´ÐÐʱ , sed ÒÀ white.dat¡¢red.dat¡¢black.dat ˳Ðò , Ö´Ðб༭ָÁî s/yellow/blue/(Çë²ÎÕÕ[section 4.1] , ½øÐÐ×Ö·û´®µÄÌæ»»¡£

2.5.Ö´ÐÐÊä³öµÄ¿ØÖÆ
ÔÚÃüÁîÁÐÉϵÄÑ¡Ïî -n (Åú×¢[7]) ±íʾÊä³öÓɱ༭ָÁî¿ØÖÆ¡£ÓÉǰÕÂÄÚÈݵÃÖª , sed »á "×Ô¶¯µÄ" ½«Êý¾ÝÓÉ pattern space ÊäË͵½±ê×¼Êä³ö?¡£µ«½è×ÅÑ¡Ïî -n , ¿É½« sed Õâ "×Ô¶¯µÄ" µÄ¶¯×÷¸Ä³É "±»¶¯µÄ" ÓÉËüËùÖ´Ðеı༭ָÁî(Åú×¢[8])À´¾ö¶¨½á¹ûÊÇ·ñÊä³ö¡£
ÓÉÉÏÊö¿ÉÖª , Ñ¡Ïî -n ±ØÐëÓë±à¼­Ö¸ÁîÒ»ÆðÅäºÏ , ·ñÔòÎÞ·¨»ñµÃ½á¹û¡£ÀýÈç , Ó¡³ö white.dat ÎļþÄÚº¬ÓÐ "white" ×Ö·û´®µÄÊý¾ÝÐÐ , ÆäÃüÁîÈçÏÂ:

sed -n -e '/white/p' white.dat

ÉÏÃæÃüÁîÖÐ , Ñ¡Ïî -n Óë±à¼­Ö¸Áî /white/p (²ÎÕÕ[section4.6]) Ò»ÆðÅäºÏ¿ØÖÆÊä³ö¡£ÆäÖÐ , Ñ¡Ïî -n ½«Êä³ö¿ØÖÆÈ¨ÒƸø±à¼­Ö¸Áî;/white/p ½«Êý¾ÝÐÐÖк¬ÓÐ "white" ×Ö·û´®Ó¡³öÆÁÄ»¡£

3.·¶Àý
Ò»°ãÔÚʵ¼ÊʹÓñ༭Æ÷µÄ¹ý³ÌÖÐ , ³£ÐèÒªÖ´ÐÐÌæ»»ÎļþÖеÄ×Ö·û´®¡¢°áÒÆ¡¢É¾³ý¡¢ÓëËÑѰÊý¾ÝÐеȵȶ¯×÷¡£µ±È» , Ò»°ã½»Ì¸Ê½±à¼­Æ÷(Èç vi¡¢emacs)¶¼ÄÜ×öµÃµ½ÉÏÊö¹¦ÄÜ , µ«ÎļþÒ»µ©ÓдóÁ¿ÉÏÊö±à¼­ÐèÇóʱ , ÔòÓÃËüÃDZ༭ʮ·ÖûÓÐЧÂÊ¡£±¾Õ½«ÓþÙÀýµÄ·½Ê½ËµÃ÷ÈçºÎÓà sed ×Ô¶¯Ö´ÐÐÕâЩ±à¼­¹¦ÄÜ¡£´ËÍâ , ÔÚ±¾Õ·¶ÀýÖÐ , ¾ùÒÔÏÂÊö·½Ê½ÃèÊö?µÄÐèÇó :
½«ÎļþÖÐ...Êý¾Ý , Ö´ÐÐ...(¶¯×÷)

Èç´Ë , Ä¿µÄÊÇΪÁËÄܽ«ËüÃÇѸËÙµÄת³É±à¼­Ö¸Áî¡£ÆäÖÐ , " ...Êý¾Ý" ²¿·Ý , ת³ÉÖ¸ÁîÖеÄλַ²ÎÊý±íʾ ; "Ö´ÐÐ...¶¯×÷" ²¿·Ý , Ôòת³Éº¯Êý²ÎÊý±íʾ ¡£ÁíÍâ , µ± "Ö´ÐÐ...¶¯×÷" ÒªÓÉÊý¸öº¯Êý²ÎÊý±íʾʱ , Ôò¿ÉÀûÓà "{ "Óë " }" ¼¯ºÏÕâЩº¯Êý²ÎÊý(Åú×¢[9]) , ÆäÖ¸ÁîÐÎʽÈçÏ :
µØÖ·²ÎÊý{
º¯Êý²ÎÊý1
º¯Êý²ÎÊý2
º¯Êý²ÎÊý3
.
:
}

ÉÏÊöÖ¸Áî±íʾ , ½«¶Ô·ûºÏµØÖ·²ÎÊýµÄÊý¾Ý , ÒÀ´ÎÖ´Ðк¯Êý²ÎÊý1¡¢º¯Êý²ÎÊý2¡¢º¯Êý²ÎÊý3 ... ±íʾµÄ¶¯×÷¡£ÏÂÃæ¸÷½Ú , ·Ö±ð¾ÙÀý˵Ã÷ sed Ìæ»»Êý¾Ý¡¢Òƶ¯¡¢É¾³ýÊý¾Ý¡¢¼°ËÑѰÊý¾ÝµÄÃüÁî¡£
3.1 Ìæ»»ÎļþÖеÄÊý¾Ý
3.2 °á¶¯ÎļþÖеÄÊý¾Ý
3.3 ɾ³ýÎļþÖеÄÊý¾Ý
3.4 ËÑѰÎļþÖеÄÊý¾Ý
3.1 Ìæ»»ÎļþÖеÄÊý¾Ý
Sed ¿ÉÌæ»»ÎļþÖеÄ×Ö·û´®¡¢Êý¾ÝÐС¢ÉõÖÁÊý¾ÝÇø¡£ÆäÖÐ , ±íÊ¾Ìæ»»×Ö·û´®µÄÖ¸ÁîÖеĺ¯Êý²ÎÊýΪ s(²ÎÕÕ[section4.1]); ±íÊ¾Ìæ»»Êý¾ÝÐС¢»òÊý¾ÝÇøµÄÖ¸ÁîÖеĺ¯Êý²ÎÊýΪ c(²ÎÕÕ[section4.5])¡£ÉÏÊöÇé¿öÒÔÏÂÃæÈý¸öÀý×Ó˵Ã÷¡£ÉÏÊöÇé¿öÒÔÏÂÃæÈý¸öÀý×Ó˵Ã÷¡£
ÀýÒ». ½«ÎļþÖк¬ "machine" ×Ö·û´®µÄÊý¾ÝÐÐÖÐµÄ "phi" ×Ö·û´® , Ìæ»»³ÉΪ "beta" ×Ö·û´®¡£ÆäÃüÁîÁÐÈçÏ :
sed -e '/machine/s/phi/beta/g' input.dat(ÒÔºóÎļþ?¶¼ÒÔ input.dat ´ú±í)

Àý¶þ. ½«ÎļþÖÐµÚ 5 ÐÐÊý¾Ý , Ìæ»»³É¾ä×Ó "Those who in quarrels interpose, must often wipe a bloody nose."¡£ÆäÃüÁîÁÐÈçÏÂ
sed -e '5c\
Those must often wipe a bloody nose.
' input.dat

ÀýÈý. ½«ÎļþÖÐ 1 ÖÁ 100 ÐеÄ×ÊÁÏÇø , Ìæ»»³ÉÈçÏÂÁ½ÐÐ×ÊÁÏ :
How are you?
data be deleted!

ÔòÆäÃüÁîÁÐÈçÏÂ
sed -e '1,100c\
How are you?\
data be deleted!
' input.dat

3.2 °á¶¯ÎļþÖеÄÊý¾Ý
ʹÓÃÕß¿ÉÓà sed ÖÐµÄ hold space ÔÝ´æ±à¼­ÖеÄÊý¾Ý¡¢Óú¯Êý²ÎÊý w(²ÎÕÕ[section4.9])½«ÎļþÊý¾Ý°á¶¯µ½ËüÎļþÄÚ´¢´æ¡¢»òÓú¯Êý²ÎÊý r(²ÎÕÕ[section4.8])½«Ëü?ÄÚÈݰᵽÎļþÄÚ¡£Hold space ÊÇ sed ÓÃÀ´ÔÝ´æ pattern space ÄÚÊý¾ÝµÄ»º´æÆ÷ , µ± sed Ö´Ðк¯Êý²ÎÊý h¡¢H(²ÎÕÕ[section4.19])ʱ , »á½« pattern space ×ÊÁÏÔÝ´æµ½ hold space;µ±Ö´Ðк¯Êý²ÎÊý x¡¢g¡¢G(²ÎÕÕ[section4.22])ʱ , »á½«ÔÝ´æµÄ×ÊÁÏÈ¡µ½ pattern space ¡£ÏÂÃæ¾ÙÈý¸öÀý×Ó˵Ã÷¡£
ÀýÒ». ½«ÎļþÖеÄǰ 100 Êý¾Ý , °áµ½ÎļþÖÐµÚ 300 ºóÊä³ö¡£ÆäÃüÁîÁÐÈçÏ :

sed -f mov.scr Îļþ?

mov.scr ?µÄÄÚÈÝΪ
1,100{
H
d
}
300G

ÆäÖÐ ,

1,100{
H
d
}

Ëü±íʾ½«ÎļþÖеÄǰ 100 Êý¾Ý , ÏÈ´¢´æ(²ÎÕÕ[section4.19])ÔÚ hold space Ö®ºóɾ³ý ;Ö¸Áî 300G (²ÎÕÕ[section4.22]) ±íʾ , ½« hold space ÄÚµÄ×ÊÁÏ , Ìí¼ÓÔÚÎļþÖÐµÄµÚ 300 Êý¾ÝºóÊä³ö¡£
Àý¶þ. ½«ÎļþÖк¬ "phi" ×Ö·û´®µÄÊý¾ÝÐÐ , °áÖÁ mach.inf ?Öд¢´æ¡£ÆäÃüÁîÁÐÈçÏ :
sed -e '/phi/w mach.inf' Îļþ?

ÀýÈý. ½« mach.inf ?ÄÚÈÝ , °áÖÁÎļþÖк¬ "beta" ×Ö·û´®µÄÊý¾ÝÐС£ÆäÃüÁîÁÐÈçÏ :
sed -e '/beta/r mach.inf' Îļþ?

ÁíÍâ , ÓÉÓÚ sed ÊÇÒ» stream(²ÎÕÕ[section1.4])±à¼­Æ÷ , ¹ÊÀíÂÛÉÏÊä³öºóµÄÎļþÊý¾Ý²»¿ÉÄÜÔÙ°á»ØÀ´±à¼­¡£

3.3 ɾ³ýÎļþÖеÄÊý¾Ý
ÒòΪ sed ÊÇÒ»Ðб༭Æ÷ , ËùÒÔ sed ºÜÈÝÒ×ɾ³ý¸ö±ðÊý¾ÝÐлòÕû¸öÊý¾ÝÇø¡£Ò»°ãÓú¯Êý²ÎÊý d(²ÎÕÕ[section4.2])»ò D(²ÎÕÕ[section4.17]) À´±íʾ¡£ÏÂÃæ¾ÙÁ½¸öÀý×Ó˵Ã÷¡£
½«?ÄÚËùÓпհ×ÐÐÈ«²¿É¾³ý¡£ÆäÃüÁîÁÐΪ
sed -e '/^$/d' Îļþ?

regular expression(Åú×¢[¸½Â¼ A]) , ^$ ±íʾ¿Õ°×ÐС£ ÆäÖÐ , ^ ÏÞÖÆÆäºó×Ö·û´®±ØÐëÔÚÐÐÊ×; $ ÏÞÖÆÆäǰ×Ö·û´®±ØÐëÔÚÐÐβ¡£
½«ÎļþÄÚÁ¬ÐøµÄ¿Õ°×ÐÐ , ɾ³ýËüÃdzÉΪһÐС£ÆäÃüÁîÁÐΪ
sed -e '/^$/{
N
/^$/D
}' Îļþ?

ÆäÖÐ , º¯Êý²ÎÊý N(²ÎÕÕ[section4.16])±íʾ , ½«¿Õ°×ÐеÄÏÂÒ»ÐÐ×ÊÁÏÌí¼ÓÖÁ pattern space ÄÚ¡£º¯Êý²ÎÊý /^$/D ±íʾ , µ±Ìí¼ÓµÄÊǿհ×ÐÐʱ , ɾ³ýµÚÒ»Ðпհ×ÐÐ , ¶øÇÒʣϵĿհ×ÐÐÔòÔÙÖØÐÂÖ´ÐÐÖ¸ÁîÒ»´Î¡£Ö¸ÁîÖØÐÂÖ´ÐÐÒ»´Î , ɾ³ýÒ»Ðпհ×ÐÐ , Èç´Ë·´¸´Ö±ÖÁ¿Õ°×ÐкóÌí¼ÓµÄΪ·Ç¿Õ°×ÐÐΪֹ , ¹ÊÁ¬ÐøµÄ¿Õ°×ÐÐ×îºóֻʣһ¿Õ°×Ðб»Êä³ö¡£
3.4 ËÑѰÎļþÖеÄÊý¾Ý
Sed ¿ÉÒÔÖ´ÐÐÀàËÆ UNIX ÃüÁî grep µÄ¹¦ÄÜ¡£ÀíÂÛÉÏ , ¿ÉÓà regular expression(²ÎÕÕ[¸½Â¼ A])¡£ÀýÈç , ½«?Öк¬ÓÐ "gamma" ×Ö·û´®µÄÊý¾ÝÐÐÊä³ö¡£ÔòÆäÃüÁîÁÐÈçÏÂ:
sed -n -e '/gamma/p' Îļþ?

µ«ÊÇ , sed ÊÇÐб༭Æ÷ , ËüµÄËÑѰ»ù±¾ÉÏÊÇÒÔÒ»ÐÐΪµ¥Î»¡£Òò´Ë , µ±Ò»Ð©×Ö·û´®Òò»»Ðжø±»²ð³ÉÁ½²¿·Ýʱ , Ò»°ãµÄ·½·¨¼´²»¿ÉÐС£´Ëʱ , ¾Í±ØÐëÒԺϲ¢Á½Ðеķ½Ê½À´ËÑѰÕâЩÊý¾Ý¡£ÆäÇé¿öÈçÏÂÃæÀý×Ó:
Àý. ½«ÎļþÖк¬ "omega" ×Ö·û´®µÄÊý¾ÝÊä³ö¡£ÆäÃüÁîÁÐÈçÏÂ

sed -f gp.scr Îļþ?

gp.scr ?µÄÄÚÈÝÈçÏ :
/omega/b
N
h
s/.*\n//
/omega/b
g
D

ÔÚÉÏÊö sed script(Åú×¢[10]), Òò½èן¯Êý²ÎÊý b ÐγÉÀàËÆ C ÓïÑÔÖÐµÄ case statement ½á¹¹ , ʹµÃ sed ¿É·Ö±ð´¦Àíµ±Êý¾ÝÄÚº¬ "omega" ×Ö·û´® ; µ± "omega" ×Ö·û´®±»²ð³ÉÁ½ÐÐ ; ÒÔ¼°Êý¾ÝÄÚûÓÐ"omega" ×Ö·û´®µÄÇé¿ö¡£½ÓÏÂÀ´¾ÍÒÀÉÏÊöµÄÈýÖÖÇé¿ö , ½« sed script ·Ö³ÉÏÂÃæÈý²¿·ÝÀ´ÌÖÂÛ¡£
µ±Êý¾ÝÄÚº¬ "omega" , ÔòÖ´Ðб༭ָÁî
/omega/b

Ëü±íʾµ±×ÊÁÏÄÚº¬ "omega" ×Ö·û´®Ê± , sed ²»ÓÃÔÙ¶ÔËüÖ´ÐкóÃæµÄÖ¸Áî , ¶øÖ±½Ó½«ËüÊä³ö¡£
µ±Êý¾ÝÄÚûÓÐ"omega" , ÔòÖ´Ðб༭ָÁîÈçÏÂ
N
h
s/.*\n//
/omega/b

ÆäÖÐ , º¯Êý²ÎÊý N(²ÎÕÕ[section 4.16]) , Ëü±íʾ½«ÏÂÒ»ÐÐ×ÊÁ϶ÁÈëʹµÃ pattern space ÄÚº¬Ç°ºóÁ½ÐÐÊý¾Ý ¡£º¯Êý²ÎÊý h(²ÎÕÕ[section 4.19]) , Ëü±íʾ½« pattern space ÄÚµÄǰºóÁ½ÐÐ×ÊÁÏ´æÈë hold space ¡£º¯Êý²ÎÊý s/.*\n// , Ëü±íʾ½« pattern space ÄÚµÄǰºóÁ½ÐÐ×ÊÁϺϲ¢(Åú×¢[11])³ÉÒ»ÐС£/omega/b , Ëü±íʾÈç¹ûºÏ²¢ºóµÄÊý¾ÝÄÚº¬ "omega" ×Ö·û´® , Ôò²»ÓÃÔÙÖ´ÐÐËüÖ®ºóµÄÖ¸Áî , ¶ø½«´ËÊý¾Ý×Ô¶¯Êä³ö ;

µ±ºÏ²¢ºóµÄÊý¾ÝÒÀ¾É²»º¬ "omega" , ÔòÖ´Ðб༭ָÁîÈçÏÂ
g
D

ÆäÖÐ , º¯Êý²ÎÊý g(²ÎÕÕ[section4.21]) , Ëü±íʾ½« hold space Äںϲ¢Ç°µÄÁ½ÐÐ×ÊÁÏ·Å»Ø pattern space¡£ º¯Êý²ÎÊý D(²ÎÕÕ[section4.17]) , Ëü±íʾɾ³ýÁ½ÐÐ×ÊÁÏÖеĵÚÒ»ÐÐ×ÊÁÏ , ²¢ÈÃʣϵÄÄÇÐÐÊý¾Ý , ÖØÐÂÖ´ÐÐ sed script¡£Èç´Ë , ÎÞÂÛµÄ×ÊÁÏÐÐÄÚ»òÐмäµÄ×Ö·û´®²Å¿ÉËÑѰÍêÈ«¡£

½éÉܺ¯Êý²ÎÊý
±¾Õ½«ÒÔÒ»½ÚÒ»¸öº¯Êý²ÎÊýµÄ·½Ê½ ,½éÉÜËùÓÐ sed ÌṩµÄº¯Êý²ÎÊý , ÆäÖÐÓÐ


| s | d | a | i | c | p | l | r | w | y | ! | n | q | = | # | N | D | P | h | H | g | G | x | b | t |


ÁíÍâ , ÔÚ¸÷½ÚÖÐ , Ê×Ïȼòµ¥½éÉܺ¯Êý²ÎÊý¹¦ÄÜ , ½Ó×Å˵Ã÷º¯Êý²ÎÊýÓëµØÖ·²ÎÊýÅäºÏµÄ¸ñʽ , ¶øÆäÖÐÒ²Ò»²¢ÃèÊö sed Ö´Ðд˺¯Êý²ÎÊýµÄ¹¤×÷ÇéÐΡ£
4.1 s
º¯Êý²ÎÊý s ±íÊ¾Ìæ»»(substitute)ÎļþÄÚ×Ö·û´®¡£ÆäÖ¸Áî¸ñʽÈçÏ :
[address1[ ,address2]] s/pattern/replacemen/[flag]
¶ÔÉÏÊö¸ñʽÓÐÏÂÃæ¼¸µã˵Ã÷ :

º¯Êý²ÎÊý s ×î¶àÓëÁ½¸öµØÖ·²ÎÊýÅäºÏ¡£
¹ØÓÚ "s/pattern/replacement/[flag]"(Åú×¢[12]) ÓÐÏÂÃæ¼¸µã˵Ã÷:
pattern : ËüΪ reguler expression ×Ö·û´®¡£Ëü±íʾÎļþÖÐÒª±»Ìæ»»µÄ×Ö·û´®¡£
replacement : ËüΪһ°ã×Ö·û´®¡£µ«ÆäÄÚ³öÏÖÏÂÁÐ×Ö·ûÓÐÌØ±ðÒâÒå :

& : ´ú±íÆäǰ pattern ×Ö·û´®¡£ÀýÈç
sed -e 's/test/& my car/' ×ÊÁÏÎļþÃû

Ö¸ÁîÖÐ , & ´ú±í pattern ×Ö·û´® "test"¡£¹ÊÖ´Ðкó , Êý¾ÝÎļþµÄ "test" ±»Ìæ»»³É "test my car"¡£
\n : ´ú±í pattern Öб»µÚ n ¸ö \( ¡¢\)(²ÎÕÕ[¸½Â¼ A]) ËùÀ¨ÆðÀ´µÄ×Ö·û´®¡£ÀýÈç
sed -e 's/\(test\) \(my\) \(car\)/[\2 \3 \1]/' ×ÊÁÏÎļþÃû

Ö¸ÁîÖÐ , \1 ±íʾ "test"¡¢\2 ±íʾ "my"¡¢\1 ±íʾ "car" ×Ö·û´®¡£¹ÊÖ´Ðкó , Êý¾ÝÎļþµÄ "test my car" ±»Ìæ»»³É "[my car test]"¡£
\ : ¿ÉÓÃËüÀ´»¹Ô­Ò»Ð©ÌØÊâ·ûºÅ(ÈçÉÏÊöµÄ & Óë \ )±¾Éí×ÖÃæÉϵÄÒâÒå , »òÓÃËüÀ´´ú±í»»ÐС£
flag : Ö÷ÒªÓÃËüÀ´¿ØÖÆÒ»Ð©Ìæ»»Çé¿ö :
µ± flag Ϊ g ʱ , ´ú±íÌæ»»ËùÓзûºÏ(match)µÄ×Ö·û´® ¡£
µ± flag Ϊʮ½øÖÆÊý m ʱ , ´ú±íÌæ»»ÐÐÄÚµÚ m ¸ö·ûºÏµÄ×Ö·û´®¡£
µ± flag Ϊ p ʱ , ´ú±íÌæ»»µÚÒ»¸ö·ûºÏ pattern µÄ×Ö·û´®ºó , ½«Êý¾ÝÊä³ö±ê×¼Êä³öÎļþ¡£
µ± flag Ϊ w wfile ʱ , ´ú±íÌæ»»µÚÒ»¸ö·ûºÏ pattern µÄ×Ö·û´®ºó , Êä³öµ½ wfile ?ÄÚ(Èç¹û wfile ²»´æÔÚ , Ôò»áÖØÐ¿ªÆôÃûΪ wfile µÄµµ°¸)¡£
µ±Ã»ÓÐ flag ʱ , Ôò½«×ÊÁÏÐÐÄÚµÚÒ»¸ö·ûºÏ pattern µÄ×Ö·û´®ÒÔ replacement ×Ö·û´®À´Ìæ»» ¡£
delimiter : ÔÚ "/pattern/replace/[flag] " ÖÐ "/" ±»µ±³ÉÒ» delimiter¡£³ýÁ˿հ×(blank)¡¢»»ÐÐ(newline) Ö®Íâ , ʹÓÃÕß¿ÉÓÃÈκÎ×Ö·û×÷Ϊ delimiter¡£ÀýÈçÏÂÊö±à¼­Ö¸Áî
s#/usr#/usr1#g

ÉÏÊöÃüÁîÖÐ \verb|#| Ϊ delimiter¡£Èç¹ûÓà "/" ×ö delimiter , Ôò sed »á½« pattern Óë replacement ÖÐµÄ "/" µ±³É delimiter ¶ø·¢Éú´íÎó¡£
·¶Àý:
ÌâÄ¿ : Ìæ»» input.dat ?(ºóÃæÈç¹ûûÓÐÌØ±ðÖ¸¶¨ , ¾ù¼ÙÉè??ÃûΪ input.dat)ÄÚ "1996" ×Ö·û´®³É "1997" , ͬʱ½«ÕâЩÊý¾ÝÐдæÈë year97.dat ?ÄÚ¡£
˵Ã÷ : Óú¯Êý²ÎÊý s ָʾ sed ½« "1996" ×Ö·û´®Ìæ»»³É "1997" , ÁíÍâÓà s argument ÖÐµÄ flag w ָʾ sed ½«Ìæ»»¹ýµÄ×ÊÁÏÐдæÈë year97.dat ?ÄÚ¡£
sed ÃüÁîÁÐ:
sed -e 's/1996/1997/w year97.dat' input.dat


4.2 d
º¯Êý²ÎÊý d ±íʾɾ³ýÊý¾ÝÐÐ , ÆäÖ¸Áî¸ñʽÈçÏÂ:

[address1[ ,address2]] d


¶ÔÉÏÊö¸ñʽÓÐÏÂÃæ¼¸µã˵Ã÷:

º¯Êý²ÎÊý d ×î¶àÓëÁ½¸öµØÖ·²ÎÊýÅäºÏ¡£
sed Ö´ÐÐɾ³ý¶¯×÷Çé¿öÈçÏ :
½« pattern space ÄÚ·ûºÏµØÖ·²ÎÊýµÄÊý¾Ýɾ³ý¡£
½«ÏÂÒ»±Ê×ÊÁ϶Á½ø pattern space ¡£
ÖØÐÂÖ´ÐÐ sed script¡£
·¶Àý : ¿É²Î¿¼ section 3.3¡£
4.3 a
º¯Êý²ÎÊý a ±íʾ½«×ÊÁÏÌí¼Óµ½ÎļþÖС£ÆäÖ¸Áî¸ñʽÈçÏÂ:

[address1] a\ ʹÓÃÕßËùÊäÈëµÄÊý¾Ý

¶ÔÉÏÊö¸ñʽÓÐÏÂÃæ¼¸µã˵Ã÷:


º¯Êý²ÎÊý a ×î¶àÓëÒ»¸öµØÖ·²ÎÊýÅäºÏ¡£
º¯Êý²ÎÊý a ½ô½Ó×Å "\" ×Ö·ûÓÃÀ´±íʾ´ËÐнáÊø , ʹÓÃÕßËùÊäÈëµÄÊý¾Ý±ØÐë´ÓÏÂÒ»ÐÐÊäÈë¡£Èç¹ûÊý¾Ý³¬¹ýÒ»ÐÐ , ÔòÐëÔÚÿÐеĽáβ¼ÓÈë"\"¡£
sed Ö´ÐÐÌí¼Ó¶¯×÷Çé¿öÈçÏ : µ± pattern space ÄÚÊý¾ÝÊä³öºó , sed ¸ú×ÅÊä³öʹÓÃÕßËùÊäÈëµÄÊý¾Ý¡£
·¶Àý :
ÌâÄ¿: Ìí¼Ó "¶àÈÎÎñ²Ù×÷ϵͳ" ÔÚº¬ "UNIX" ×Ö·û´®µÄÊý¾ÝÐк󡣼ÙÉè input.dat ?µÄÄÚÈÝÈçÏ :
UNIX

˵Ã÷: Óú¯Êý²ÎÊý a ½«ËùÊäÈëµÄÊý¾ÝÌí¼ÓÔÚº¬ "UNIX" ×Ö·û´®µÄÊý¾ÝÐкó¡£
sed ÃüÁîÁÐÈçÏ :
sed -e '/UNIX/a\
¶àÈÎÎñ²Ù×÷ϵͳ
' input.dat

Ö´ÐÐÉÏÊöÃüÁîºó , ÆäÊä³ö½á¹ûÈçÏ :
UNIX
¶àÈÎÎñ²Ù×÷ϵͳ

4.4 i
º¯Êý²ÎÊý i ±íʾ½«×ÊÁϲåÈëÎļþÖС£ÆäÖ¸Áî¸ñʽÈçÏÂ:
[address1] i\ ʹÓÃÕßËùÊäÈëµÄÊý¾Ý


¶ÔÉÏÊö¸ñʽÓÐÏÂÃæ¼¸µã˵Ã÷:

º¯Êý²ÎÊý i ×î¶àÓëÒ»¸öµØÖ·²ÎÊýÅäºÏ¡£
º¯Êý²ÎÊý i ½ô½Ó×Å "\" ×Ö·ûÓÃÀ´±íʾ´ËÐнáÊø , ʹÓÃÕßËùÊäÈëµÄÊý¾Ý±ØÐë´ÓÏÂÒ»ÐÐÊäÈë¡£Èç¹ûÊý¾Ý³¬¹ýÒ»ÐÐ , ÔòÐëÔÚÿÐеĽáβ¼ÓÈë"\"¡£
sed Ö´ÐвåÈ붯×÷µÄÇé¿öÈçÏ : ÔÚ pattern space ÄÚÊý¾ÝÊä³öǰ , sed ÏÈÊä³öʹÓÃÕßËùÊäÈëµÄÊý¾Ý¡£
·¶Àý :
ÌâÄ¿: ½« "ÎÄÕ°æÈ¨ÊôÓÚÖÐÑëÑо¿Ôº" ²åÔÚ input.dat ?Öк¬ "Ôº³¤ : ÀîÔ¶ÕÜ" µÄÊý¾ÝÐÐ֮ǰ¡£¼ÙÉè input.dat ?ÄÚÈÝÈçÏ :
Ôº³¤ : ÀîÔ¶ÕÜ

˵Ã÷: Óú¯Êý²ÎÊý i ½«Êý¾ÝÐÐ "ÎÄÕ°æÈ¨ÊôÓÚÖÐÑëÑо¿Ôº" ²åÔÚº¬ "Ôº³¤ : ÀîÔ¶ÕÜ" µÄÊý¾ÝÐÐ֮ǰ¡£
sed ÃüÁîÁÐÈçÏÂ:
sed -e '/Ôº³¤ : ÀîÔ¶ÕÜ/i\
ÎÄÕ°æÈ¨ÊôÓÚÖÐÑëÑо¿Ôº
' input.dat

Ö´ÐÐÉÏÊöÃüÁîºóµÄÊä³öÈçÏ :
ÎÄÕ°æÈ¨ÊôÓÚÖÐÑëÑо¿Ôº
Ôº³¤ : ÀîÔ¶ÕÜ

4.5 c
º¯Êý²ÎÊý c ±íʾ¸Ä±äÎļþÖеÄÊý¾Ý¡£Æä¸ñʽÈçÏÂ:
[address1[ ,address2]]c\ ʹÓÃÕßËùÊäÈëµÄÊý¾Ý


¶ÔÉÏÊö¸ñʽÓÐÏÂÃæ¼¸µã˵Ã÷:

º¯Êý²ÎÊý c ×î¶àÓëÁ½¸öµØÖ·²ÎÊýÅäºÏ¡£
º¯Êý²ÎÊý c ½ô½Ó×Å "\" ×Ö·ûÓÃÀ´±íʾ´ËÐнáÊø , ʹÓÃÕßËùÊäÈëµÄÊý¾Ý±ØÐë´ÓÏÂÒ»ÐÐÊäÈë¡£Èç¹ûÊý¾Ý³¬¹ýÒ»ÐÐ , ÔòÐëÔÚÿÐеĽáβ¼ÓÈë"\"¡£
sed Ö´Ðиı䶯×÷µÄÇé¿ö : ÔÚ pattern space ÄÚÊý¾ÝÊä³öʱ , sed ¸Ä±äËü³ÉΪʹÓÃÕßËùÊäÈëµÄÊý¾Ý¡£
·¶Àý : ²Î¿¼ section 3.1 Ö®Àý¶þ¡¢Èý¡£
4.6 p
º¯Êý²ÎÊý p ±íʾӡ³ö×ÊÁÏ¡£ÆäÖ¸Áî¸ñʽÈçÏ :
[address1[ , address2]] p


¶ÔÓÚÉÏÊö¸ñʽÓÐÏÂÃæ¼¸µã˵Ã÷ :

º¯Êý²ÎÊý p ×î¶àÓëÁ½¸öµØÖ·²ÎÊýÅäºÏ¡£
sed Ö´ÐÐÓ¡³ö¶¯×÷µÄÇé¿öÈçÏ : sed ¿½±¸Ò»·Ý pattern space ÄÚÈÝÖÁ±ê×¼Êä³ö?¡£
·¶Àý : ²Î¿¼ section 3.4 ¿ªÍ·µÄÄÚÈÝ¡£
4.7 l
º¯Êý²ÎÊý l , ³ý¿É½«×ÊÁÏÖÐµÄ nonprinting character ÒÔ ASCIIÂëÁгöÍâ , ÆäÓÚ¾ùÓ뺯Êý²ÎÊý p Ïàͬ¡£ÀýÈç , ½«ÏÂÃæ input.dat ?ÖÐµÄ ^[ ÒÔ ASCII ÂëÓ¡³ö

The Great ^[ is a movie starring Steve McQueen.

Ö´ÐÐÃüÁî sed -e 'l' input.dat ºó , ÔòÊä³ö½á¹ûÈçÏ :
The Great \003 is a movie starring Steve McQueen.
The Great is a movie starring Steve McQueen.

ÉÏÊöµÚ¶þÐÐÊý¾ÝΪ sed µÄ×Ô¶¯Êä³ö(Çë²ÎÕÕÅú×¢[]¡£
4.8 r
º¯Êý²ÎÊý r ±íʾ¶ÁÈëËüµµ°¸ÄÚÈݵ½?ÖС£ÆäÖ¸Áî¸ñʽÈçÏ :

[address1] r Ëü?Ãû³Æ


¶ÔÓÚÉÏÊö¸ñʽÓÐÏÂÃæ¼¸µã˵Ã÷ :

º¯Êý²ÎÊý r ×î¶àÓëÒ»¸öµØÖ·²ÎÊýÅäºÏ¡£
ÔÚÖ¸ÁîÖÐ , º¯Êý²ÎÊý r ÓëËü?Ãû³Æ¼ä , Ö»ÄÜÓÐÒ»¿Õ¸ñ¡£
sed Ö´ÐжÁÈ붯×÷µÄÇé¿öÈçÏ : ÔÚ pattern space ÄÚÊý¾ÝÊä³öºó , sed ¶Á³öËü?µÄÄÚÈݸú×ÅÊä³ö¡£µ±Ëü?²»´æÔÚʱ , sed ÕÕÑùÖ´ÐÐÆäËüÖ¸Áî¶ø²»»áÓÐÈκδíÎóѶϢ²úÉú¡£
·¶Àý : ²Î¿¼ section 3.1 Ö®ÀýÈý¡£
4.9 w
º¯Êý²ÎÊý w ±íʾ½«?ÖеÄдµ½Ëü?ÄÚ¡£ÆäÖ¸Áî¸ñʽÈçÏ :

[address1[ ,address2]] w Ëü?Ãû³Æ


¶ÔÓÚÉÏÊö¸ñʽÓÐÏÂÃæ¼¸µã˵Ã÷ :

º¯Êý²ÎÊý w ×î¶àÓëÁ½¸öµØÖ·²ÎÊýÅäºÏ¡£
ÔÚÖ¸ÁîÖÐ , º¯Êý²ÎÊý w ÓëËü?Ãû³Æ¼ä , Ö»ÄÜÓÐÒ»¿Õ¸ñ¡£
sed Ö´ÐÐд³ö¶¯×÷µÄÇé¿öÈç : ½« pattern space ÄÚ×ÊÁÏдµ½ËüÎļþÄÚ¡£Êý¾ÝдÈëʱ , »áÈ¡´ú(overwrite)Ô­À´µµ°¸ÄÚµÄÊý¾Ý¡£ÁíÍâ , µ±Ëü?²»´æÔÚʱ , sed »áÖØÐ²úÉú(creat)Ëü¡£
·¶Àý:²Î¿¼ section 3.1 Ö®Àý¶þ¡£
4.10 y
º¯Êý²ÎÊý y ±íʾת»»Êý¾ÝÖеÄ×Ö·û¡£ÆäÖ¸Áî¸ñʽÈçÏ :

[address1[ ,address2]]y /xyz.../abc.../


¶ÔÓÚÉÏÊö¸ñʽÓÐÏÂÃæ¼¸µã˵Ã÷ :

º¯Êý²ÎÊý×î¶àÅäºÏÁ½¸öµØÖ·²ÎÊý¡£
Ö¸ÁîÖÐ , /abc.../xyz.../(x¡¢y¡¢z¡¢a¡¢b¡¢c ´ú±íijЩ×Ö·û) Ϊ y µÄ argument ¡£ÆäÖÐ abc... Óë xyz... µÄ×Ö·û¸öÊý±ØÐëÏàͬ¡£
sed Ö´ÐÐת»»Ê± , ½« pattern space ÄÚÊý¾ÝÄÚµÄ a ×Ö·ûת»»³É x ×Ö·û ¡¢b ×Ö·ûת»»³É y ×Ö·û ¡¢c ×Ö·ûת»»³É z ×Ö·û ...¡£
·¶Àý:
ÌâÄ¿: ½« input.dat ÎļþÖеÄСд×Öĸ¸Ä³É´óд¡£¼ÙÉè input.dat ?µÄÄÚÈÝÈçÏ :
Sodd's Second Law:
Sooner or later, the worst possible set of
circumstances is bound to occur.

˵Ã÷:ÀûÓú¯Êý²ÎÊý y ָʾ sed ×ö×Öĸ´óСµÄת»»¡£
sed ÃüÁîÁÐÈçÏ :
sed -e '
y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/
' input.dat

Ö´ÐÐÉÏÊöÃüÁîÊä³ö½á¹ûÈçÏ :
SODD'S SECOND LAW:
SOONER OR LATER, THE WORST POSSIBLE SET OF
CIRCUMSTANCES IS BOUND TO OCCUR.

4.11 !
º¯Êý²ÎÊý ! ±íʾ²»Ö´Ðк¯Êý²ÎÊý¡£µ±ÓÐÈçÏÂÖ¸Áîʱ ,

[address1[ , address2]] ! º¯Êý²ÎÊý


±íʾ , ¶Ô·ûºÏµØÖ·²ÎÊýÖ®Êý¾Ý²»Ö´Ðк¯Êý²ÎÊý¡£ÀýÈçɾ³ý , ³ýÁ˺¬ "1996" ×Ö·û´® , ËùÓÐÊý¾ÝÐÐ , ÔòÖ´ÐÐÈçÏÂÃüÁî

sed -e '/1996/!d' input.dat

4.12 n
º¯Êý²ÎÊý n ±íʾ¶ÁÈëÏÂÒ»ÐÐ×ÊÁÏ¡£ÆäÖ¸Áî¸ñʽÈçÏÂ:

[address1[ ,address2]] n


¶ÔÉÏÊö¸ñʽÓÐÏÂÃæ¼¸µã˵Ã÷ :

º¯Êý²ÎÊý n ×î¶àÅäºÏÁ½¸öµØÖ·²ÎÊý¡£
sed Ö´ÐжÁÈëÏÂÒ»Ðж¯×÷µÄÇé¿öÈçÏ :
Êä³öÔÚ pattern space µÄÊý¾Ý¡£
½«ÏÂÒ»±Ê×ÊÁ϶Áµ½ pattern space¡£
Ö´ÐÐÏÂÒ»¸ö±à¼­Ö¸Áî¡£
·¶Àý(¿ÉÓë[section4.18]Öеķ¶Àý±È½Ï):
ÌâÄ¿ : Êä³ö input.dat ÎļþÄÚżÊýÐÐ×ÊÁÏ¡£¼ÙÉè input.dat ?ÄÚÈÝÈçÏÂ:
The
UNIX
Operation
System

˵Ã÷: ÔÚÃüÁîÁÐÉÏ
ÒÔÑ¡Ïî -n , ½«Êý¾ÝÊä³öµÄ¿ØÖÆÈ¨(²ÎÕÕ[section2.5])ת¸øÖ¸Áî¡£
ÀûÓú¯Êý²ÎÊý n ½«ÏÂÒ»ÐÐÊý¾Ý(żÊýÐÐ)È¡´ú pattern space ÄÚµÄ×ÊÁÏÐÐ(ÆæÊýÐÐ)¡£
ÀûÓú¯Êý²ÎÊý p ½« pattern space ÄÚµÄÊý¾Ý(żÊýÐÐ)Êä³ö¡£
×îºó , Õû¸öÊä³öÖ»ÓÐÔ­ÏÈÎļþÄڵĿÊýÐÐÊý¾Ý¡£
sed ÃüÁîÁÐÈçÏ :
sed -n -e 'n' -e 'p' infro.dat

Ö´ÐÐÉÏÊöÃüÁîºó , Êä³öµÄ½á¹ûÈçÏ :
UNIX
System

4.13 q
º¯Êý²ÎÊý q ±íÊ¾ÌøÀë sed ¡£ÆäÖ¸Áî¸ñʽÈçÏÂ:

[address1] q




¶ÔÉÏÊö¸ñʽÓÐÏÂÃæ¼¸µã˵Ã÷ :

º¯Êý²ÎÊý q ×î¶àÅäºÏÒ»¸öµØÖ·²ÎÊý¡£
sed Ö´ÐÐÌøÀ붯×÷ʱ , ËüÍ£Ö¹ÊäÈë pattern space Êý¾Ý , ͬʱֹͣÊý¾ÝË͵½±ê×¼Êä³öÎļþ¡£
·¶Àý :
ÌâÄ¿: ¶ÔÎļþÎļþÖ´ÐÐ script_file Äڵı༭ָÁî , ³ý·ÇÓöµ½ "Linux" ×Ö·û´®¡£
˵Ã÷: ÎÞÂÛ script_file ÄÚÊǺÎÖÖÖ¸Áî , ʹÓÃÕßÖ»ÒªÔÚÃüÁîÁÐÉÏÓÃÖ¸Áî/Linux/q , º¯Êý²ÎÊý q »áÇ¿ÆÈ sed Óöµ½ "Linux" ʱ×öÌøÀ붯×÷¡£
sed ÃüÁîÁÐÈçÏ :
sed -e '/Linux/q' -f script_file input.dat


4.14 =
º¯Êý²ÎÊý = ±íʾӡ³ö×ÊÁϵÄÐÐÊý¡£ÆäÖ¸Áî¸ñʽÈçÏÂ:

[address1 ,[address2]] =


¶ÔÉÏÊö¸ñʽÓÐÏÂÃæ¼¸µã˵Ã÷ :

º¯Êý²ÎÊý = ×î¶àÅäºÏÁ½¸öµØÖ·²ÎÊý¡£
Ö´ÐÐʱ , ÐÐÊý½«ÔÚÊý¾ÝÊä³öǰÏÈÊä³ö¡£
·¶Àý :
ÌâÄ¿: Ó¡³ö input.dat ÎļþÄÚ×ÊÁÏÐÐÊý¡£¼ÙÉè input.dat µÄÄÚÈÝÈçÏ :
The UNIX
Operating System

˵Ã÷ : Óú¯Êý²ÎÊý = À´Ó¡³ö×ÊÁϵÄÐÐÊý¡£
sed ÃüÁîÁÐÈçÏ :
sed -e '=' input.dat

Ö´ÐÐÉÏÊöÃüÁîºó , Êä³öµÄ½á¹ûÈçÏ :
1
The UNIX
2
Operating System

4.15 #
ÔÚ script file ÄÚ , º¯Êý²ÎÊý # ºóµÄÎÄ×ÖΪע½â¡£µ±×¢½âÎÄ×Ö³¬¹ý¶àÐÐʱ , ÆäÐмäÐëÒÔ "\" »»ÐÐ×Ö·ûÏà¸ô¡£

4.16 N
º¯Êý²ÎÊý N ±íʾÌí¼ÓÏÂÒ»±Ê×ÊÁÏÔÚ pattern space ÄÚ¡£ÆäÖ¸Áî¸ñʽÈçÏÂ:

[address1 ,[address2]] N


¶ÔÉÏÊö¸ñʽÓÐÏÂÃæ¼¸µã˵Ã÷ :

º¯Êý²ÎÊý N ×î¶àÅäºÏÁ½¸öµØÖ·²ÎÊý¡£
sed Ö´ÐÐʱ , ½«ÏÂÒ»ÐÐÊý¾Ý¶ÁÈë²¢Ìí¼ÓÔÚ pattern space ÄÚ , Êý¾ÝÐмäÒÔ»»ÐÐ×Ö·û(embedded newline character)·Ö¸ô¡£´ËÍâ , ÔÚÌæ»»Ê± , »»ÐÐ×Ö·û¿ÉÓà \n À´ match¡£
·¶Àý :
ÌâÄ¿: ½«ÏÂÊöÁ½ÐÐÊý¾ÝºÏ²¢¡£¼ÙÉè input.dat µÄÄÚÈÝÈçÏ :
The UNIX
Operating System

˵Ã÷ : ÏÈÀûÓú¯Êý²ÎÊý N ½«Á½ÐÐÊý¾ÝÖÃÓÚ pattern space ÄÚ , ÔÚÀûÓú¯Êý²ÎÊý s/\n/ / ½«Á½ÐÐÊý¾Ý¼äµÄ·Ö¸ôºÅ \n ÒÔ¿Õ°×Ìæ´ú , Èç´ËÁ½ÐÐÊý¾Ý±ä³ÉÒ»ÐÐÊä³ö¡£
sed ÃüÁîÁÐÈçÏ :
sed -e 'N' -e 's/\n/ /' input.dat

Ö´ÐÐÉÏÊöÃüÁîºó , ÆäÊä³öµÄ½á¹ûÈçÏÂ:
The UNIX Operating System

4.17 D
º¯Êý²ÎÊý D ±íʾɾ³ý pattern space ÄڵĵÚÒ»ÐÐ×ÊÁÏ¡£ÆäÖ¸Áî¸ñʽÈçÏÂ:

[address1,address2]D


¶ÔÉÏÊö¸ñʽÓÐÏÂÃæ¼¸µã˵Ã÷ :

º¯Êý²ÎÊý D ×î¶àÅäºÏÁ½¸öµØÖ·²ÎÊý¡£
º¯Êý²ÎÊý D Óë d µÄ±È½ÏÈçÏ :
µ± pattern space ÄÚÖ»ÓÐÒ»Êý¾ÝÐÐʱ , D Óë d ×÷ÓÃÏàͬ¡£
µ± pattern space ÄÚÓжàÐÐ×ÊÁÏÐÐʱ
D ±íʾֻɾ³ý pattern space ÄÚµÚÒ»ÐÐ×ÊÁÏ ; d Ôòȫɾ³ý¡£
D ±íʾִÐÐɾ³ýºó , pattern space ÄÚ²»Ìí¼ÓÏÂÒ»±ÊÊý¾Ý , ¶ø½«Ê£ÏµÄÊý¾ÝÖØÐÂÖ´ÐÐ sed script ; d Ôò¶ÁÈëÏÂÒ»ÐкóÖ´ÐÐ sed script¡£
·¶Àý : ²Î¿¼ section 3.3 µÄµÚ¶þ¸öÀý×Ó¡£
4.18 P
º¯Êý²ÎÊý P ±íʾӡ³ö pattern space ÄڵĵÚÒ»ÐÐ×ÊÁÏ¡£ÆäÖ¸Áî¸ñʽÈçÏÂ:

[address1,address2] P


¶ÔÉÏÊö¸ñʽÓÐÏÂÃæ¼¸µã˵Ã÷ :

º¯Êý²ÎÊý P ×î¶àÅäºÏÁ½¸öµØÖ·²ÎÊý¡£
P Óë p , ³ýÁËÃæ¶ÔµÄ pattern space ÄÚµÄÊý¾ÝÐÐÊý²»Í¬Íâ , ÆäËü¾ùÏàͬ¡£
·¶Àý(¿ÉÓë[section4.12]Öеķ¶Àý):
ÌâÄ¿ : Êä³ö input.dat ÎļþÄÚÆæÊýÐÐ×ÊÁÏ¡£¼ÙÉè input.dat ?ÄÚÈÝÈçÏÂ:
The
UNIX
System

˵Ã÷: ÔÚÃüÁîÁÐÉÏ
ÒÔÑ¡Ïî -n , ½«Êý¾ÝÊä³öµÄ¿ØÖÆÈ¨(²ÎÕÕ[section2.5])ת¸øÖ¸Áî¡£
ÀûÓú¯Êý²ÎÊý N ½«Å¼ÊýÐÐÌí¼ÓÖÁ pattern space ÄÚÆæÊýÐкó¡£
ÀûÓú¯Êý²ÎÊý P ½« pattern space ÄڵĵÚÒ»ÐÐ(ÆæÊýÐÐ)Êä³ö¡£
ÔÚÆæÊýÐÐÊä³öºó , pattern space ÄÚʣϵÄÊý¾ÝÐÐ(żÊýÐÐ)Ôò±»·ÅÆúÊä³ö¡£×îºó , Õû¸öÊä³öÖ»ÓÐÔ­ÏÈµÄÆæÊýÐÐÊý¾Ý¡£
sed ÃüÁîÁÐ :
sed -n -e 'N' -e 'P' infro.dat

Ö´ÐÐÉÏÊöÃüÁîºó , Êä³öµÄ½á¹ûÈçÏ :
The
System

4.19 h
º¯Êý²ÎÊý h ±íʾÔÝ´æ pattern space µÄ×ÊÁÏÖÁ hold space¡£ÆäÖ¸Áî¸ñʽÈçÏÂ:

[address1 ,[address2]] h


¶ÔÉÏÊö¸ñʽÓÐÏÂÃæ¼¸µã˵Ã÷ :

º¯Êý²ÎÊý h ×î¶àÅäºÏÁ½¸öµØÖ·²ÎÊý¡£
sed Ö´ÐÐÔݴ涯×÷ʱ , »á¸Çµô(overwrite) hold space ÄÚÔ­À´µÄÊý¾Ý¡£
µ± sed È«²¿Ö´ÐнáÊøÊ± , hold space ÄÚÊý¾Ý»á×Ô¶¯Çå³ý¡£
·¶Àý :²Î¿¼ section 3.4 µÄÀý×Ó¡£
4.20 H
º¯Êý²ÎÊý H Óë h Ψһ²î±ðÊÇ , sed Ö´ÐÐ h ʱ , Êý¾Ý¸Çµô(overwrite) hold space ÄÚÔ­À´µÄÊý¾Ý , ¶ø H , Êý¾ÝÔòÊÇ "Ìí¼Ó(append)" ÔÚ hold space Ô­À´Êý¾Ýºó¡£ÀýÌâÇë²Î¿¼ section 3.2 Ö®ÀýÒ»¡£
4.21 g
º¯Êý²ÎÊý g ±íʾÓ뺯Êý²ÎÊý h Ïà·´µÄ¶¯×÷ , Ëü±íʾ½« hold space ÄÚ×ÊÁÏ·Å»Ø pattern space ÄÚ¡£ÆäÖ¸Áî¸ñʽÈçÏ :

[address1,address2]g




º¯Êý²ÎÊý g ×î¶àÅäºÏÁ½¸öµØÖ·²ÎÊý¡£
sed Ö´ÐзŻض¯×÷ʱ , Êý¾Ý¸Çµô(overwrite)(Åú×¢[13]) pattern space ÄÚÔ­À´µÄÊý¾Ý¡£
ÀýÌâ :²Î¿¼ section 3.4 µÄÀý×Ó¡£
4.22 G
º¯Êý²ÎÊý G Óë g Ψһ²î±ðÊÇ , sed Ö´ÐÐ g ʱ , Êý¾Ý¸Çµô(overwrite) pattern space ÄÚÔ­À´µÄÊý¾Ý , ¶ø G , Êý¾ÝÔòÊÇ "Ìí¼Ó(append)" ÔÚ pattern space Ô­À´Êý¾Ýºó¡£Àý×ÓÇë²Î¿¼ section 3.2 ÀýÒ»¡£
4.23 x
º¯Êý²ÎÊý x ±íʾ½»»» hold space Óë pattern space ÄÚµÄÊý¾Ý¡£ÆäÖ¸Áî¸ñʽÈçÏ :

[address1 ,[address2]] x


º¯Êý²ÎÊý x ´ó²¿·ÝÓëÆäËü´¦Àí hold space µÄº¯Êý²ÎÊýÒ»ÆðÅäºÏ¡£ÀýÈç , ½« input.dat ÎļþÄÚµÚ 1 ÐÐ×ÊÁÏÈ¡´úµÚ 3 ÐÐ×ÊÁÏ¡£´Ëʱ , Óú¯Êý²ÎÊý h Óë x À´ÅäºÏ¡£ÆäÖÐ , ÒÔº¯Êý²ÎÊý h ½«µÚ 1 ×ÊÁÏ´æÈë hold space ; µ±µÚ 3 ÐÐÊý¾Ý³öÏÖÔÚ pattern space , ÒÔº¯Êý²ÎÊý x ½»»» hold space Óë pattern space µÄÄÚÈÝ¡£Èç´Ë , µÚ 3 ÐÐ×ÊÁϾͱ»µÚ 1 ×ÊÁÏÌæ´ú¡£ÆäÃüÁîÁÐÈçÏÂ:

sed -e '1h' -e '3x' input.dat

4.24 b¡¢:label
º¯Êý²ÎÊý : Ó뺯Êý²ÎÊý b ¿ÉÔÚ sed script ÄÚ½¨Á¢ÀàËÆ BASIC ÓïÑÔÖÐ GOTO Ö¸ÁîµÄ¹¦ÄÜ¡£ÆäÖÐ , º¯Êý²ÎÊý : ½¨Á¢±ê¼Ç;º¯Êý²ÎÊý b ½«ÏÂÒ»¸öÖ´ÐеÄÖ¸Áî branch µ½±ê¼Ç´¦Ö´ÐС£º¯Êý²ÎÊý : Óë b , ÔÚ script file ÄÚÅäºÏµÄÇé¿öÈçÏÂ

.
.
.
±à¼­Ö¸Áîm1
:¼ÇºÅ
±à¼­Ö¸Áîm2
.
.
.
[address1,[address2]]b [¼ÇºÅ]

ÆäÖÐ , µ± sed Ö´ÐÐÖÁÖ¸Áî [address1,[address2]]b [¼ÇºÅ] ʱ , Èç pattern space ÄÚµÄÊý¾Ý·ûºÏµØÖ·²ÎÊý , Ôò sed ½«ÏÂÒ»¸öÖ´ÐеÄλÖà branch ÖÁÓÉ :¼ÇºÅ(Åú×¢[14])É趨µÄ±ê¼Ç´¦ , Ò²¾ÍÊÇÔÙÓÉ "±à¼­Ö¸Áîm2" ... Ö´ÐС£ÁíÍâ , Èç¹ûÖ¸ÁîÖк¯Êý²ÎÊý b ºóûÓмǺŠ, Ôò sed ½«ÏÂÒ»¸öÖ´ÐеÄÖ¸Áî branch µ½ script file µÄ×îºó , ÀûÓô˿Éʹ sed script ÄÚÓÐÀàËÆ C ÓïÑÔÖÐµÄ case statement ½á¹¹¡£
·¶Àý :
ÌâÄ¿: ½« input.dat ÎļþÄÚÊý¾ÝÐеĿªÍ·×Öď֨¸´Ó¡ 40 ´Î¡£¼ÙÉè input.dat ?µÄÄÚÈÝÈçÏ :

A
B
C

˵Ã÷: ÓÃÖ¸Áî b p1 Óë :p1 ¹¹³ÉÖ´ÐÐÔö¼Ó×ÖĸµÄÑ­»·(loop) , ͬʱÔÚ×Öĸ³öÏÖ 40 ¸öʱ , Ò²ÓÃÖ¸Áî b À´Ìø³öÑ­»·¡£ÏÂÃæ¾ÍÒÔÎļþÄÚµÚÒ»ÐÐÊý¾Ý "A" ΪÀý , ÃèÊöËüÈçºÎÁ¬Ðø¶àÌí¼Ó 39 ¸ö "A" ÔÚͬһÐÐ:
ÓÃÖ¸Áî s/A/AA/(²ÎÕÕ section4.1)½« "A" Ìæ»»³É "AA"¡£
ÓÃÖ¸Áî b p1 Óë :p1 ¹¹³ÉÑ­»·(loop) , ËüÄ¿µÄʹÉÏÊö¶¯×÷±»·´¸´µÄÖ´ÐС£Ã¿Ö´ÐÐÒ»´ÎÑ­»· , ÔòÊý¾ÝÐÐÉ쵀 "A" ¾Í¶à³öÒ»¸ö¡£ÀýÈç , µÚÒ»´ÎÑ­»·Êý¾ÝÐбä³É "AA" , µÚ¶þ´ÎÑ­»·×ÊÁÏÐбä³É "AAA" ...¡£
ÓÃÖ¸Áî [ABC]\{40\}/b(Åú×¢[15]) À´×÷Ϊֹͣѭ»·µÄÌõ¼þ¡£µ±Êý¾ÝÐÐÓÐÁ¬Ðø 40 ¸ö A ³öÏÖʱ , º¯Êý²ÎÊý b ½«Ö´ÐеÄÖ¸ÁîÌøµ½×îºó , Í£Ö¹¶Ô´ËÐеı༭¡£
ͬÑù , ¶ÔÆäËûÊý¾ÝÐÐÒ²ÈçͬÉÏÊöµÄ·½Ê½Ö´ÐС£
sed ÃüÁîÁÐÈçÏ :
sed -e '{
:p1
/A/s/A/AA/
/B/s/B/BB/
/C/s/C/CC/
/[ABC]\{40\}/b
b p1
}' input.dat

4.25 t
»ù±¾ÉÏ , º¯Êý²ÎÊý t Óë º¯Êý²ÎÊý b µÄ¹¦ÄÜÀàËÆ , ³ýÁËÔÚÖ´ÐÐ t µÄ branch ǰ , »áÏÈÈ¥²âÊÔÆäǰµÄÌæ»»Ö¸ÁîÓÐûÓÐÖ´ÐÐÌæ»»³É¹¦Íâ¡£ÔÚ script file ÄÚµÄÇé¿öÈçÏÂ:
.
.
.
±à¼­Ö¸Áîm1
:¼ÇºÅ
±à¼­Ö¸Áîm2
.
.
.
s/.../.../
[address1,[address2]]t [¼ÇºÅ]
±à¼­Ö¸Áîm3

ÆäÖÐ , Ó뺯Êý²ÎÊý b ²»Í¬´¦ÔÚÓÚ , Ö´Ðк¯Êý²ÎÊý t branch ʱ , »áÏȼì²éÆäǰһ¸öÌæ»»Ö¸Áî³É¹¦Óë·ñ¡£Èç³É¹¦ , ÔòÖ´ÐÐ branch ; ²»³É¹¦ , Ôò²» branch , ¶ø¼ÌÐøÖ´ÐÐÏÂÒ»¸ö±à¼­Ö¸Áî , ÀýÈçÉÏÃæµÄ±à¼­Ö¸Áîm3¡£
·¶Àý:
ÌâÄ¿ : ½« input.dat ÎļþÖÐ×ÊÁÏ A1 Ìæ»»³É C1¡¢C1 Ìæ»»³É B1¡¢B1 Ìæ»»³É A1¡£input.dat ?µÄÄÚÈÝÈçÏÂ:
´úºÅ
B1
A1
B1
C1
A1
C1

˵Ã÷ : input.dat ÎļþÖÐÈ«²¿Êý¾ÝÐÐÖ»ÐèÒªÖ´ÐÐÒ»´ÎÌæ»»¶¯×÷ , µ«Îª±ÜÃâÊý¾Ý±»Ìæ»»¶à´Î , ËùÒÔÀûÓú¯Êý²ÎÊý t ÔÚ sed script ÄÚÐγÉÒ»ÀàËÆ C ÓïÑÔÖÐ case statement ½á¹¹ , ʹÿÐÐÊý¾ÝÌæ»»Ò»´ÎºóÄÜÁ¢¼´Óú¯Êý²ÎÊý t ÌøÀëÌæ»»±à¼­¡£
sed ÃüÁîÁÐ :
sed -e '{
s/A1/C1/
t
s/C1/B1/
t
s/B1/A1/
t
}' input.dat

³£ÓÃµÄ regular expression


--------------------------------------------------------------------------------

³£ÓÃµÄ regular expression
ÆÕͨ×Ö·û ÓÉÆÕͨ×Ö·ûËù×é³ÉµÄ regular expression ÆäÒâÒåÓëÔ­×Ö·û´®×ÖÃæÒâÒåÏàͬ¡£
^×Ö·û´® ÏÞÖÆ×Ö·û´®±ØÐë³öÏÖÓÚÐÐÊ× ¡£
$×Ö·û´® ÏÞÖÆ×Ö·û´®±ØÐë³öÏÖÐÐβ¡£
. ±íʾÈÎÒâÒ»×Ö·û¡£
[...] ×Ö·û¼¯ºÏ, ÓÃÒÔ±íʾÁ½ÖÐÀ¨ºÅ¼äËùÓÐ×Ö·ûµ±ÖеÄÈÎÒ»¸ö ,Èç [^...]±íʾÁ½ÖÐÀ¨ºÅ¼äËùÓÐ×Ö·ûÒÔÍâµÄ×Ö·û¡£
-& ×Ö·û¼¯ºÏÖпÉÓÃ"&"Ö¸¶¨×Ö·ûµÄ·¶Î§¡£
* ÓÃÒÔÐÎÈÝÆäǰµÄ×Ö·û(»ò×Ö·û¼¯ºÏ)¿ÉÖØ¸´ÈÎÒâ¶à´Î ¡£
\n ±íʾǶÈëÐÂÐÐ×Ö·û(imbedded new line character)¡£
\(...\) ÓÚ regular expression ÖÐʹÓÃ"\(" "\)"À´À¨×¡Ò»²¿·ÝµÄ regular expression ; Æäºó¿ÉÓÃ"\1"À´±íʾµÚÒ»¸ö±»"\(" "\)"À¨×¡µÄ²¿·Ý¡£Èô regular expression ÖÐʹÓÃÊý´ÎµÄ"\(" "\)"À´À¨×¡²»Í¬µÄ²¿·Ý , ÔòÒÀ´ÎʹÓÃ"\1","\2","\3",...(×î¶à¿Éµ½"\9")¡£
ÁíÍâ , ÔÚ²»Í¬Æ½Ì¨ÉÏ , regular expression »áÓÐһЩ²»Í¬µÄÏÞÖÆ , ÏêϸÇé¿ö²ÎÕÕ appendix B¡£

HP-UX Release 9.01 Óë SunOS 5.4 ÄÚ sed ¶Ô regular expression Öи÷ÖÖÌØÊâ×Ö·ûµÄ½ÓÊÜÄÜÁ¦
regular expression µÄÌØÊâ×Ö·û HP-UX Release 9.01 SunOS 5.4
. ½ÓÊÜ ½ÓÊÜ
* ½ÓÊÜ ½ÓÊÜ
^ ½ÓÊÜ ½ÓÊÜ
$ ½ÓÊÜ ½ÓÊÜ
\ ½ÓÊÜ ½ÓÊÜ
[ ] ½ÓÊÜ ½ÓÊÜ
\( \) Óë \1 ... \9 ºÏÓà ½ÓÊÜ ½ÓÊÜ
\{ÖØ¸´´ÎÊý\} ½ÓÊÜ ½ÓÊÜ
\{ÏÂÏÞ,ÉÏÏÞ\} ½ÓÊÜ ½ÓÊÜ
\ÏÂÏÞ,\} ½ÓÊÜ ½ÓÊÜ
\< \> ²»½ÓÊÜ ½ÓÊÜ
+ ²»½ÓÊÜ ²»½ÓÊÜ
? ²»½ÓÊÜ ²»½ÓÊÜ
| ²»½ÓÊÜ ²»½ÓÊÜ
( ) ²»½ÓÊÜ ²»½ÓÊÜ
& ½ÓÊÜ ½ÓÊÜ

Åú×¢
Åú×¢Ò».
¾ÍÊǺóÃæ½«»áÌáµ½µÄ sed script¡£
Åú×¢¶þ.
Ö¸Áî s/Unix/UNIX/ ±íʾ½« "Unix" Ìæ»»³É "UNIX"¡£Çë²ÎÕÕ section 4.1¡£
Åú×¢Èý.
ÔÚÖ¸ÁîÖÐÓÐ 20 ¼¸¸öº¯Êý²ÎÊý¿É¹©Ñ¡Ôñ¡£
Åú×¢ËÄ.
ÒÔºóÕâµµ°¸³Æ×÷ script file¡£
Åú×¢Îå.
±à¼­Ö¸Áî 1,10d ÖÐ , µØÖ·²ÎÊýΪ 1,10 , ¹Ê 1 ÖÁ 10 ÐеÄÊý¾ÝÖ´Ðк¯Êý²ÎÊý d ËùÖ¸¶¨µÄɾ³ý¶¯×÷¡£
Åú×¢Áù.
±à¼­Ö¸Áî s/yellow/black/g ÖÐ , ÓÉÓÚûÓеØÖ·²ÎÊý , ¹ÊËùÓеÄÊý¾ÝÐж¼ÒªÖ´Ðк¯Êý²ÎÊý s/yellow/black/g ËùÖ¸¶¨Ìæ»»¶¯×÷¡£ÔÚº¯Êý²ÎÊý s/yellow/black/g ÖÐ , /yellow/black/g Ϊ s µÄ argument , Æä±íÊ¾Ìæ»»×ÊÁÏÐÐÖÐËùÓÐµÄ "yellow" ³É "black"¡£
Åú×¢Æß.
ÆäÃüÁî¸ñʽÈçÏ :
sed -n [-e ±à¼­Ö¸Áî].. [-f script_file].. [Îļþ?..]

Åú×¢°Ë.
ÕâЩ±à¼­Ö¸ÁîÖеĺ¯Êý²ÎÊý¿ÉÄÜÊÇ p¡¢l¡¢s µÄÆäÖÐÖ®Ò»¡£
Åú×¢¾Å.
ÔÚÓÐЩÇé¿öÏ , Ò²¿ÉÓñ༭ָÁî´úÌæº¯Êý²ÎÊý¡£ÀýÈç section3.3 Ö®Àý¶þ¡£
Åúעʮ.
ÕâÀï , sed script ÊÇÖ¸ gp.scr ?µÄÄÚÈÝ¡£Ëü±íʾÕâÒ»´Î sed Ö´Ðеı༭ָÁî¡£
Åúעʮһ.
´Ëº¯Êý²ÎÊý , ±íÊ¾Ìæ»»µô(³ýµô) pattern space ÄÚÁ½ÐмäµÄ»»ÐмǺš£ ¹Ê pattern space ÄÚÖ»ÓÐÒ»ÐÐ×ÊÁÏ¡£
Åúעʮ¶þ.
/pattern/replacement/[flag] Ϊº¯Êý²ÎÊý s µÄ argument¡£
ÅúעʮÈý.
×¢Òâ´Ëʱ , ËäÈ»×ÊÁÏÊÇ·Å»Ø pattern space , µ« hold space µÄÄÚÈÝ»¹ÊDz»±ä¡£
ÅúעʮËÄ.
×¢Òâ ":" Óë¼ÇºÅ¼ä²»¿ÉÓпոñ¡£
ÅúעʮÎå.
µØÖ·²ÎÊý [ABC]\{40\} , ±íʾ 40 ¸ö A ×Öĸ»ò 40 ¸ö B ×Öĸ»ò 40 ¸ö C ×Öĸ¡£ÆäÖÐ [ABC] ±íʾ "A" »ò "B" »ò "C"; ÆäºóµÄ \{40\} ±íʾÆäǰµÄ×ÖĸÓÐ 40 ¸ö¡£regular expression Çë²ÎÕÕ¸½Â¼ A
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 84 ÌõÆÀÂÛ

  1. haiyanmao_linux ÓÚ 2013-01-18 14:24:34·¢±í:

    ?Áϲ»?

  2. zhangbin101004 ÓÚ 2012-03-29 12:09:58·¢±í:

    Ôõôһ¶Ñ¹ã¸æ

  3. shirley1987 ÓÚ 2009-06-01 15:03:54·¢±í:

    Õý¿´µ½ÄØ£¬Ñ§Ï°Ï£¡

  4. 66.130.138.* ÓÚ 2007-07-17 10:59:19·¢±í:

    http://e88e393687aba61674c800be43789052-t.xkktxb.org e88e393687aba61674c800be43789052 http://e88e393687aba61674c800be43789052-b1.xkktxb.org e88e393687aba61674c800be43789052 http://e88e393687aba61674c800be43789052-b3.xkktxb.org 8d1f2bfe3cbc5359328d95464cab8b7c