wA@As峹аѦo

Wܪk (Regular Expression, RE, κ٬`Wܪk)OzL@ǯSrƦCAΥHyjM/N/Rz@CΦhCrrA ²檺AWܪkNOΦbrꪺBzW@yܦzCWܪkäO@Ӥu{A ӬO@ӦrBzзǨ̾ڡApGzQnHWܪk觋BzrANonϥΤ䴩Wܪku{~A ou{ܦhAҦp vi, sed, awk C

Wܪktκ޲zӻbOܭnI]tη|ͫܦhTAoǰTnȬOiA ɡA޲ziHzLWܪk\ӱNnT^XӡAòͫKd\²ƺ޲zy{C~A ܦhM˳n]䴩WܪkRAҦplALo(LoUH)NOܭn@ӨҤlC ҥHAz̦nnAѥWܪkޯAbӺ޲zDɡA~²Bzz`ưȡI

G`ϥΪ̻ݭnh[mߡA]ثeܦhM󳣬OϥΥWܪkӹFyLoBRzتA FӥD޲zKQʡAϥΪ̦ܤ֭nݪWܪkNqI

1. eG OWܪk
@@1.1 OWܪk
@@1.2 Wܪktκ޲zγ~
@@1.3 Wܪksxγ~
@@1.4 WܪkP Shell b Linux w
@@1.5 Wܪk
2. ¦Wܪk
@@2.1 yt勵WܪkvT
@@2.2 grep @Ƕiﶵ
@@2.3 ¦Wܪkm
@@2.4 ¦WܪkrŷJ(characters)
@@2.5 sed uG 檺sW/R, 檺N/, jMèN,
3. Wܪk
4. 󪺮榡ƻPBz
@@4.1 printfG 榡ƦCL
@@4.2 awkGnΪƳBzu
@@4.3 ɮפuG, diff, cmp, patch
@@4.4 ɮצCLdzƤuG pr
5. I^U
6. D
7. ѦҸƻP\Ū
8. w糧媺ijGhttp://phorum.vbird.org/viewtopic.php?t=23885

eGOWܪk

AѤF Linux 򥻫O (BASH) åBxF vim A۫HAVLrPOUFͤFaH UӡAUn}lФ@ӫܭn[ANOҿתyWܪk (Regular Expression)zoI


OWܪk

@Ӧg窥tκ޲zA|iDAGyWܪkuOnIz ܭnOH]`ͬNϥΪڡI|ӨҤlӻA bA`ϥ vim @ѳBzε{gɨϥΨ쪺yjM/Nz\A o|ʭn@}GANontXWܪkӳBzoI

²檺AWܪkNOBzrꪺkALOH欰ӶirꪺBz欰A WܪkzL@ǯSŸUAiHϥΪ̻FyjM/R/NzYSwrꪺBz{ǡI

|ҨӻAڥuQ VBird(eӤjgr) Vbird(Ȧ@Ӥjgr) oӦrˡAOnLr (Ҧp VBIRD, vbird ݭn)AӦpzHpGbSWܪkҤ(Ҧp MS word)AAγ\NonϥΩjpgkA Ϊ̬OOH VBird Vbird jMMCOAjpgi|jM VBIRD/vbird/VbIrD ݭnrӳyxZC

A|Өtα`ҤlnFA]po{tΦb}ɭԡAѬO|X{@ mail {~A Ӷ}L{{dzOb /etc/init.d/ UA]NOAbӥؿUYɮפ㦳 mail orAAQnNɮ׮XӶid߭ק諸ʧ@CɧAXӧtorɮסH AMiH@ɮפ@ɮת}ҡAMhjM mail orAuO.....ӥؿUɮץiण 100 ӻ pGAѥWܪkޥAun@ONXӰաGygrep 'mail' /etc/init.d/*z grep NO䴩Wܪku{@Ip²aI

ͨo̴Noni@BFAWܪk򥻤WO@ءyܪkzA unu{䴩oتܪkAӤu{NiHΨӧ@WܪkrBzΡC Ҧp vi, grep, awk ,sed uA]o̦䴩WܪkA ҥHAoǤuNiHϥΥWܪkSrӶirꪺBzCҦp cp, ls Oå䴩WܪkA ҥHNuϥ bash ۤvUΦrӤwC


Wܪktκ޲zγ~

򬰦ڻݭnDzߥWܪkOH@ϥΪ̨ӻAѩϥΨ쥿Wܪk|iणhA ]PLyOALA󨭬tκ޲zAӻAWܪkhO@ӡyiǪnFIz 򻡩OHѩtΦpGbcpUACѲͪTT|hALkQaBA ӧڭ̤]DAtΪy~Tnɮ (ĤQE)z eOFtβͪҦTAMAo]tAtάO_QyJIzOơC

OtΪƶqӤjFAntκ޲zACѥhݳohTơA qdʦ檺Ƹ̭X@榳DTAOΦײhݡAQƱI oӮɭԡAڭ̴NiHzLyWܪkz\ANoǵnTiBzA ȨXyDzTӶiRAIp@ӡAAtκ޲zu@N| yֱּooFzڡIMAWܪkuI٤󦹡AA@w{תAѤAA|RWLI


Wܪksxγ~

WܪkFiHtκ޲z޲zD󬰫KQ~AƹWAѩ󥿳WܪkjjrBzOA ثe@n鳣䴩WܪkOI̱`NOylAzաI

pGAdNںWAӤo{Aثeyj먮D]@NOyU/siHzFA ӦpGڭ̥iHbAݡANNoǰDl篑ܡAΤݴN|֫ܦhnWeӷlFC p篑siHOHѩsiHXG@wDΪ̬OeA]A unCӫHɡANӫHDPeiSrꪺAo{}HNH篑I KIoӤu@FڡHNϥΥWܪkڡIثejlAn sendmail P postfix HΤ䴩lARnA䴩Wܪk\I

M٤󦹰աAܦhAn鳣䴩WܪkOIMA MUan鳣䴩LALAoǡyrz٬Oݭntκ޲zӥ[JWhA ҥHաItκ޲zAAFۨu@HΥΤݪݨDA WܪkbOܻݭn]ܭȱoDzߪ@uOI


WܪkP Shell b Linux w

bAڭ̦bǼƾǪɭԡA@ӫܭnBOFO@wnyIzA NOEEkAI\FAӦbƾΪ~WAuO@|ڡI oӤEEkڭ̦bpǪɭԴXGIF@~~IUӡAäOonIOI LoO¦¦IA{b@wf۷hO ^_^I

ӧڭ̽ͨ쪺oӥWܪkAPe@ BASH NIOƾǪEEk@ˡAO Linux ¦¦AM]OA LApGǦFA@wOyjjUzIoNnOep̭ǪZGGߡI qGߤAZ\ߨ覨IҥHաA ׬OtΪ{ѻPtΪ޲zALܴΪUڡIЦnnDz߳oӰ¦aI ^_^


Wܪk

IWܪk٦HSIWܪkrܤ觋̷ӤPYԫצӤG ¦WܪkPWܪkCWܪkF²檺@զrBz~A٥iH@sժrBzA ҦpijM VBird netman lman jMA`NAOy(or)zӤOyM(and)zBzA ɴNݭnWܪkUաIǥѯSy ( zPy | zrUA NFo˪تILAڭ̦bo̥DOȬOг̰¦¦WܪkӤwաInաIMMḀΥ\hoI

@InVjaiANOGyWܪkPUΦrO@˪FIz oܭnI]yUΦr (wildcard) NO bash ާ@@ӥ\zAWܪkhO@ئrBzܤ觋I o̭nܲM~IҥHADzߥAбNe@ bash UΦrNqѱaI

ѹ껡AHe𫎆IJWܪkɡAѷQۭnNokǦb@_AGNO...~{@j ҥH~|ijzDzߥѰOUΦrAӾDzߧaI

¦Wܪk

JMWܪkOBzrꪺ@تܤ觋ArƧǦvTytƴN|勵WܪkGvTI ~AWܪk]ݭn䴩u{ӻU~IҥHAڭ̳o̴NФ@ӳ²檺r^\઺u{ANO grep oI e@wgйL grep ﶵPѼơAۭbi grep ﶵoI Ч grep \धANiJWܪkSrŪBzOFC


yt勵WܪkvT

ytƷ|vT쥿WܪkXGOHڭ̦bĹspתrsXṱͨAɮרOȦ 0 P 1Aڭ̬ݨ쪺rrPƦrOzLsXഫӪCѩ󤣦PytsXƨäۦPAҥHN|y^GtFC |ҨӻAb^jpgsXǤAzh_TW.big5 C oػytXGOpUG

WǬOsXǡAڭ̥iHܲMo{oػytNO@ˡIpGAQn^jgrӨϥ [A-Z] ɡA |o{ LANG=C TiHȮjgr (]Os) AOpG LANG=zh_TW.big5 ɡAN|o{A sPpg b-z ]|Q^XӡI]NsXǨӬݡA big5 ytiH^y A b B c C ... z Z zo@rI ҥHAϥΥWܪkɡAݭnSOdNҪytA _hi|o{POHۦP^GI

ѩ@ڭ̦bmߥWܪkɡAϥΪOۮe POSIX зǡA]NϥΡy C zoӻyt(1)I ]AUܦhm߳OϥΡy LANG=C zoӻytƨӶiI t~AFnקKo˽sXҳy^PƦr^DA]ǯSŸڭ̱onAѤ@UI oDzŸDnUoǷNqG(1)

NNq
[:alnum:]N^jpgrμƦrAY 0-9, A-Z, a-z
[:alpha:]N^jpgrAY A-Z, a-z
[:blank:]NťP [Tab]
[:cntrl:]NLWAY]A CR, LF, Tab, Del..
[:digit:]NƦrӤwAY 0-9
[:graph:]Fťզr (ťP [Tab] ) ~LҦ
[:lower:]NpgrAY a-z
[:print:]NiHQCLXӪr
[:punct:]NIŸ (punctuation symbol)AYG" ' ? ! ; : # $...
[:upper:]NjgrAY A-Z
[:space:]|ͪťժrA]Ať, [Tab], CR
[:xdigit:]N 16 i쪺ƦrA]]AG 0-9, A-F, a-f ƦrPr

רW[:alnum:], [:alpha:], [:upper:], [:lower:], [:digit:] oXӤ@wnDNNA]Ln a-z A-Z γ~nTwܡInFAUNڭ̶}lӪi grep aI


grep @Ƕiﶵ

ڭ̦bĤQ@ BASH ̭ grep ͽ׹L@ǰ¦ΪkA grep ٦֪iΪkIUڭ̶ȦCXi grep ﶵPѼƵjaѦҡA ¦ grep ΪkаѦҫe@oI

[root@www ~]# grep [-A] [-B] [--color=auto] 'jMr' filename
ﶵPѼơG
-A G᭱i[ƦrA after NAFCXӦ~A n ]CXӡF
-B G᭱i[ƦrA befer NAFCXӦ~Ae n ]CXӡF
--color=auto iNT^ƦCXC

dҤ@G dmesg CX֤߰TAAH grep Xt eth 
[root@www ~]# dmesg | grep 'eth'
eth0: RealTek RTL8139 at 0xee846000, 00:90:cc:a6:34:84, IRQ 10
eth0:  Identified 8139 chip type 'RTL-8139C'
eth0: link up, 100Mbps, full-duplex, lpa 0xC5E1
eth0: no IPv6 routers present
# dmesg iCX֤߲ͪTIzL grep ^dT (eth) A
# Nio{pWTCLS渹PSCܡIݬݤUӽdҧaI

dҤGGӤWDAnN쪺rAB[W渹ӪܡG
[root@www ~]# dmesg | grep -n --color=auto 'eth'
247:eth0: RealTek RTL8139 at 0xee846000, 00:90:cc:a6:34:84, IRQ 10
248:eth0:  Identified 8139 chip type 'RTL-8139C'
294:eth0: link up, 100Mbps, full-duplex, lpa 0xC5E1
305:eth0: no IPv6 routers present
# A|o{F eth |SCӪܤ~A̫e٦渹I

dҤTGӤWDAbrҦb檺ePT]@_X
[root@www ~]# dmesg | grep -n -A3 -B2 --color=auto 'eth'
245-PCI: setting IRQ 10 as level-triggered
246-ACPI: PCI Interrupt 0000:00:0e.0[A] -> Link [LNKB] ...
247:eth0: RealTek RTL8139 at 0xee846000, 00:90:cc:a6:34:84, IRQ 10
248:eth0:  Identified 8139 chip type 'RTL-8139C'
249-input: PC Speaker as /class/input/input2
250-ACPI: PCI Interrupt 0000:00:01.4[B] -> Link [LNKB] ...
251-hdb: ATAPI 48X DVD-ROM DVD-R-RAM CD-R/RW drive, 2048kB Cache, UDMA(66)
# pWҥܡAA|o{r 247 Ҧbe 248 T]QܥXӡI
# o˥iHANreƮXӶiRաI

grep O@ӫܱ`]ܱ`ΪOAḼn\NOirƪAMNŦXϥΪ̻ݨDrCLXӡC ݭnOygrep bƤdM@ӦrɡAOH "" Ӷiƪ^Iz]NOAp@ɮפ 10 A𫟺㦳AҷjMrAhNܦbùWALNFI

brܤ譱Agrep iHϥ --color=auto ӱNrϥCܡC oiOӫܤ\ڡIOpGCϥ grep onۦ[W --color=auto S㪺ܳ·С ɨӦnΪ alias NoӳBz@UաIAiHb ~/.bashrc [WoGyalias grep='grep --color=auto'zAHy source ~/.bashrc zӥߧYͮħYiI o˨C grep L|۰A[WCܰաI


¦Wܪkm

nAѥWܪk²檺kNOѹڽmߥhPաIҥHbJ㥿WܪkSŸeA ڭ̥HUoɮתeӶi楿WܪkzѧaI@UAUmߤjeOG

ܩ󥻳mߥɮ׽ХѩUsӤUCݭnSO`NOAUoɮ׬Ob MS Windows tΤUs𫍧A åBwgSBzLA]ALMO¤rɡAOt@ Windows tΤUn``ۦ[J@ǯSrAҦp_r (^M) NO@ҡI ҥHAAiHNUrH vi xs regular_express.txt oɮסA LA٬OijIUsG

https://vbird.org.cn/linux_basic/0330regularex/regular_express.txt

pGA Linux iHsW Internet ܡAϥΦpUOӮYiG

wget https://vbird.org.cn/linux_basic/0330regularex/regular_express.txt

ܩoɮתepUG

[root@www ~]# vi regular_express.txt
"Open Source" is a good mechanism to develop programs.
apple is my favorite food.
Football game is not use feet only.
this dress doesn't fit me.
However, this dress is about $ 3183 dollars.^M
GNU is free air not free beer.^M
Her hair is very beauty.^M
I can't finish the test.^M
Oh! The soup taste good.^M
motorcycle is cheap than car.
This window is clear.
the symbol '*' is represented as start.
Oh!     My god!
The gd software is a library for drafting programs.^M
You are the best is mean you are the no. 1.
The world <Happy> is the same with "glad".
I like dog.
google is the best tools for search keyword.
goooooogle yes!
go! go! Let's go.
# I am VBird

oɮצ@ 22 A̩U@欰ťզI{b}lڭ̤@ӮרҤ@ӮרҪӤЧaI


jMSwr²aH]ڭ̭nq𫍧ɮ׷o the oӯSwrA²檺觋NOoˡG

[root@www ~]# grep -n 'the' regular_express.txt
8:I can't finish the test.
12:the symbol '*' is represented as start.
15:You are the best is mean you are the no. 1.
16:The world <Happy> is the same with "glad".
18:google is the best tools for search keyword.

pGQnyϦVzOH]NOAӦS 'the' oӦrɤ~ܦbùWANϥΡG

[root@www ~]# grep -vn 'the' regular_express.txt

A|o{AùWX{CF 8,12,15,16,18 椧~LCI UӡApGAQnoפjpg the oӦrAhG

[root@www ~]# grep -in 'the' regular_express.txt
8:I can't finish the test.
9:Oh! The soup taste good.
12:the symbol '*' is represented as start.
14:The gd software is a library for drafting programs.
15:You are the best is mean you are the no. 1.
16:The world <Happy> is the same with "glad".
18:google is the best tools for search keyword.

Fh (9, 14) ~A 16 ]hF@ The rQ^I


pGڷQnjM test taste oӳrɡAiHo{Ao̦@q 't?st' sboӮɭԡAڥiHo˨ӷjMG

[root@www ~]# grep -n 't[ae]st' regular_express.txt
8:I can't finish the test.
9:Oh! The soup taste good.

AѤFaH [] ̭צXӦrALԥNYy@ӡzrA ҥHAWҤlFAڻݭnrOytastzΡytestzӦrӤwI ӦpGQnjM즳 oo rɡAhϥΡG

[root@www ~]# grep -n 'oo' regular_express.txt
1:"Open Source" is a good mechanism to develop programs.
2:apple is my favorite food.
3:Football game is not use feet only.
9:Oh! The soup taste good.
18:google is the best tools for search keyword.
19:goooooogle yes!

OApGڤQn oo e g ܩOHɡAiHQΦbXrϦV [^] ӹFG

[root@www ~]# grep -n '[^g]oo' regular_express.txt
2:apple is my favorite food.
3:Football game is not use feet only.
18:google is the best tools for search keyword.
19:goooooogle yes!

NNOAڻݭnO oo AO oo eO g NOFIJӤWӪAp|o{A 1,9 椣FA] oo eX{F g ҭPI 2,3 SðݡA] foo P Foo iQIO 18 google goo ڡOѰOFA]Ӧ᭱X{F tool too ڡIҥHӦ]QCXӡ ]NOA 18 ̭MX{Fڭ̩Ҥn (goo) Oѩ󦳻ݭn (too) A ]AOŦXrjMI

ܩ 19 AP˪A] goooooogle ̭ oo eiO o AҦpG go(ooo)oogle AҥHAo@]OŦXݨDI

AӡA] oo eQnpgrAҥHAڥiHo˼g [^abcd....z]oo A Oo˦GKAѩpgr ASCII WsXǬOs򪺡A ]Aڭ̥iHN²ƬUoˡG

[root@www ~]# grep -n '[^a-z]oo' regular_express.txt
3:Football game is not use feet only.

]NOAڭ̦b@նXrApGӦrլOs򪺡AҦpjg^/pg^/ƦrA NiHϥ[a-z],[A-Z],[0-9]觋ӮѼgApGڭ̪nDrOƦrP^OH INNLgb@_AܦG[a-zA-Z0-9]CҦpAڭ̭noƦr@ANoˡG

[root@www ~]# grep -n '[0-9]' regular_express.txt
5:However, this dress is about $ 3183 dollars.
15:You are the best is mean you are the no. 1.

ѩҼ{ytsXǪvTA]FssXϥδy - z~A A]iHϥΦpUkӨoeӴժGG

[root@www ~]# grep -n '[^[:lower:]]oo' regular_express.txt
#  [:lower:] NNO a-z NIаѦҫep`

[root@www ~]# grep -n '[[:digit:]]' regular_express.txt

o˹ [] H [^] H [] - A٦e洣쪺SrAѤFܡH^_^I


ڭ̦bD@AiHdߨ@r̭ the ApGڷQn the ub歺CXOH oӮɭԴNonϥΩwrFIڭ̥iHo˰G

[root@www ~]# grep -n '^the' regular_express.txt
12:the symbol '*' is represented as start.

ɡANuѤU 12 A]u 12 檺歺O the }Yڡ㦹~A pGڷQn}YOpgr@NCXOHiHoˡG

[root@www ~]# grep -n '^[a-z]' regular_express.txt
2:apple is my favorite food.
4:this dress doesn't fit me.
10:motorcycle is cheap than car.
12:the symbol '*' is represented as start.
18:google is the best tools for search keyword.
19:goooooogle yes!
20:go! go! Let's go.

AiHo{ڭ̥iHĤ@ӦrOjgIuL grep CXruĤ@ӦrA grep OCX@Ӧr (word) IP˪AWO]iHΦpU觋ӨNG

[root@www ~]# grep -n '^[[:lower:]]' regular_express.txt

nIpGڤQn}YO^rAhiHOoˡG

[root@www ~]# grep -n '^[^a-zA-Z]' regular_express.txt
1:"Open Source" is a good mechanism to develop programs.
21:# I am VBird
# O]iHOG grep -n '^[^[:alpha:]]' regular_express.txt

`NFaH ^ ŸAbrXŸ(A[])P~OPI b [] NyϦVܡzAb [] ~hNwb歺NqInMI ϹLӫҡApGڷQnXӡApI (.) @AӦpBzG

[root@www ~]# grep -n '\.$' regular_express.txt
1:"Open Source" is a good mechanism to develop programs.
2:apple is my favorite food.
3:Football game is not use feet only.
4:this dress doesn't fit me.
10:motorcycle is cheap than car.
11:This window is clear.
12:the symbol '*' is represented as start.
15:You are the best is mean you are the no. 1.
16:The world <Happy> is the same with "glad".
17:I like dog.
18:google is the best tools for search keyword.
20:go! go! Let's go.

SO`NA]pI㦳LNq(U|)AҥHnϥθr(\)ӥ[HѰSNqI LAAγ\|ıo_ǡAO 5~9 ̫᭱]O . ڡLkCLXӡH o̴NoA Windows xn_rP_DFIڭ̨ϥ cat -A NĤ殳XӬݡA A|o{G

[root@www ~]# cat -An regular_express.txt | head -n 10 | tail -n 6
     5  However, this dress is about $ 3183 dollars.^M$
     6  GNU is free air not free beer.^M$
     7  Her hair is very beauty.^M$
     8  I can't finish the test.^M$
     9  Oh! The soup taste good.^M$
    10  motorcycle is cheap than car.$

ڭ̦bĤQͨL_rb Linux P Windows WtA bW椤ڭ̥iHo{ 5~9 欰 Windows _r (^M$) Aӥ` Linux ӶȦ 10 ܪ ($) CҥHoA . ۵MNO򱵦b $ eI]N 5~9 FIo˥iHA ^ P $ NqܡH nFAnݩUѵAۤvQ@QApGڷQnXӡA@OyťզzA ]NOAӦèSJơAӦpjMH

[root@www ~]# grep -n '^$' regular_express.txt
22:

]u歺 (^$)AҥHAo˴NiHXťզաIAӡA]AwgDb@ӵ{} (shell script) Ϊ̬O]wɷAťզP}Y # @OѡA]pGAnNƦCXOHѦҮɡA iHNoǸƬٲH`٫OQȱiAAiH@OH ڭ̥H /etc/syslog.conf oɮרӧ@dҡAAiHۦѦҤ@UXGG

[root@www ~]# cat -n /etc/syslog.conf
# b CentOS AGiHo{ 33 檺XAܦhťզP # }Y

[root@www ~]# grep -v '^$' /etc/syslog.conf | grep -v '^#'
# GȦ 10 A𫟺Ĥ@ӡy -v '^$' zNynťզzA
# ĤGӡy -v '^#' zNyn}YO # zI

O_`٫ܦhڡH


bĤQ@ bash Aڭ̪DUΦr * iHΨӥNN(0Φh)rA OWܪkäOUΦrA̤OۦPI ܩ󥿳Wܪky . zhNy靈@ӥNrzNIoӲŸbWܪkNqpUG

onAڭ̪ӽmߧaI]ڻݭnX g??d rAY@|ӦrA _YO g ӵO d AڥiHo˰G

[root@www ~]# grep -n 'g..d' regular_express.txt
1:"Open Source" is a good mechanism to develop programs.
9:Oh! The soup taste good.
16:The world <Happy> is the same with "glad".

]j g P d @wnsbӦrA]A 13 檺 god P 14 檺 gd N|QCXӰաIAӡApGڷQnCX oo, ooo, oooo ơA ]NOAܤ֭n(t) o HWAӦpOnHO o* ٬O oo* ٬O ooo* OH MAiHլݬݵGA LGӦF @_@ AҥHAڳo̴NC

] * NOy 0 өΦhӫe RE rzNqA ]Ayo*zNOGy֦ŦrΤ@ o HWrzA SO`NA]\Ŧr(NOSriHN)A]Ay grep -n 'o*' regular_express.txt zN|ҦƳCLXӿùWI

pGOyoo*zOHhĤ@ o ֩wnsbAĤG o hOiiLh o A ҥHAZOt o, oo, ooo, oooo AiHQCXӡ

PzAڭ̻ݭnyܤ֨ o HWrzɡANݭn ooo* AYOG

[root@www ~]# grep -n 'ooo*' regular_express.txt
1:"Open Source" is a good mechanism to develop programs.
2:apple is my favorite food.
3:Football game is not use feet only.
9:Oh! The soup taste good.
18:google is the best tools for search keyword.
19:goooooogle yes!

o˲z * NqFܡHnFA{bXӽmߡApGڷQnr}YPO gAO g ȯsbܤ֤@ o AYO gog, goog, gooog.... AӦpH

[root@www ~]# grep -n 'goo*g' regular_express.txt
18:google is the best tools for search keyword.
19:goooooogle yes!

pAѤFܡHAӤ@DApGڷQnX g }YP g rAriiLAӦpOnHOyg*gzܡH

[root@www ~]# grep -n 'g*g' regular_express.txt
1:"Open Source" is a good mechanism to develop programs.
3:Football game is not use feet only.
9:Oh! The soup taste good.
13:Oh!  My god!
14:The gd software is a library for drafting programs.
16:The world <Happy> is the same with "glad".
17:I like dog.
18:google is the best tools for search keyword.
19:goooooogle yes!
20:go! go! Let's go.

ժGMX{ohHӸ޲FaH@I]޲A] g*g ̭ g* NyŦrΤ@ӥHW gz b[W᭱ g A]A RE eNO g, gg, ggg, gggg A ]AunӦ֦@ӥHW g NŦXһݤFI

Ӧpoڭ̪ g....g ݨDOHINQΥN@Ӧry.zڡI YOGyg.*gz@kA] * iHO 0 ΦhӭƫeršA . ONrAҥHG y.* NNsөΦhӥNrzNաI

[root@www ~]# grep -n 'g.*g' regular_express.txt
1:"Open Source" is a good mechanism to develop programs.
14:The gd software is a library for drafting programs.
18:google is the best tools for search keyword.
19:goooooogle yes!
20:go! go! Let's go.

]ON g }YP g ANriAҥHA 1, 14, 20 OiI o .* RE ܥNrOܱ`AƱjazѨåBxI AX@DApGڷQnXyNƦrzCOH]ȦƦrAҥHNG

[root@www ~]# grep -n '[0-9][0-9]*' regular_express.txt
5:However, this dress is about $ 3183 dollars.
15:You are the best is mean you are the no. 1.

Mϥ grep -n '[0-9]' regular_express.txt ]iHoۦPGA ƱjazѤWO RE ܪkNq~nI


bWӨDAڭ̥iHQ . P RE rŤ * ӳ]w 0 ӨLhӭƦrA pGڷQn@ӽd϶ƦrƩOH|ҨӻAڷQnXӨ줭 o srAӦp@HoɭԴNonϥΨ쭭wd򪺦r {} FC ] { P } Ÿb shell OSNqA]A ڭ̥nϥθr \ LhSNq~C ܩ {} ykOo˪A]ڭn o rAiHOG

[root@www ~]# grep -n 'o\{2\}' regular_express.txt
1:"Open Source" is a good mechanism to develop programs.
2:apple is my favorite food.
3:Football game is not use feet only.
9:Oh! The soup taste good.
18:google is the best tools for search keyword.
19:goooooogle yes!

oˬݦGP ooo* rŨStڡH] 19 榳h o ¤]X{FI nA򴫭ӷjMrA]ڭ̭nX g ᭱ 2 5 o AMA@ g rAL|OoˡG

[root@www ~]# grep -n 'go\{2,5\}g' regular_express.txt
18:google is the best tools for search keyword.

IܦnI 19 שSQΤF(] 19 榳 6 o ڡI)C ApGڷQnO 2 o HW goooo....g OHFiHO gooo*g A]iHOG

[root@www ~]# grep -n 'go\{2,\}g' regular_express.txt
18:google is the best tools for search keyword.
19:goooooogle yes!

INiHXӰա


¦WܪkrŷJ (characters)

gLFWX²檺dҡAڭ̥iHN¦WܪkSrŷJpUG

RE rNqPd
^wordNqGݷjMr(word)b歺I
dҡGjM歺 # }l@AæCX渹
grep -n '^#' regular_express.txt
word$NqGݷjMr(word)bI
dҡGN ! @CLXӡAæCX渹
grep -n '!$' regular_express.txt
.NqGNy@w@ӥNrzršI
dҡGjMriHO (eve) (eae) (eee) (e e)A Ȧ (ee) IY e P e y@wzȦ@ӦrAӪťզr]OrI
grep -n 'e.e' regular_express.txt
\NqGršANSŸSNqhI
dҡGjMt޸ ' @I
grep -n \' regular_express.txt
*NqGƹsӨLahӪe@ RE r
dҡGXt (es) (ess) (esss) rA`NA] * iHO 0 ӡAҥH es ]OŦXajMrCt~A] * ơye@ RE ršzŸA ]Ab * en򱵵ۤ@ RE rųIҦpNrh y.*z I
grep -n 'ess*' regular_express.txt
[list]NqGrX RE ršA̭CXQn^rI
dҡGjMt (gl) (gd) @AݭnSOdNOAb [] yԥN@ӫݷjMrzA Ҧpy a[afl]y zNjMriHO aay, afy, aly Y [afl] N a f l NI
grep -n 'g[ld]' regular_express.txt
[n1-n2]NqGrX RE ršA̭CXQn^rdI
dҡGjMtNƦr@IݯSOdNAbrX []  - OSNqALNӦrҦsrIoӳsP_P ASCII sXA]AAsXݭn]wT(b bash AݭnTw LANG P LANGUAGE ܼƬO_TI) ҦpҦjgrh [A-Z]
grep -n '[A-Z]' regular_express.txt
[^list]NqGrX RE ršA̭CXnrνdI
dҡGjMriHO (oog) (ood) O (oot) A ^ b [] ɡANNqOyϦVܡzNC ҦpAڤnjgrAh [^A-Z]COAݭnSO`NOApGH grep -n [^A-Z] regular_express.txt ӷjMAoo{ɮפҦ泣QCXAH]o [^A-Z] OyDjgrzNA ]C@槡DjgrAҦpĤ@檺 "Open Source" N p,e,n,o.... pgr
grep -n 'oo[^t]' regular_express.txt
\{n,m\}NqGs n m Ӫye@ RE ršz
NqGY \{n\} hOs n Ӫe@ RE ršA
NqGYO \{n,\} hOs n ӥHWe@ RE ršI
dҡGb g P g 2 Ө 3 Ӫ o sbrAY (goog)(gooog)
grep -n 'go\{2,3\}g' regular_express.txt

AjաGyWܪkSrzP@bOCJOyUΦrzäۦPA ҦpAbUΦr * NOy 0 ~ LhӦrzNAObWܪkA * hOy 0 LahӪe@ RE ršzNϥΪNqäۦPAndVFI

|ҨӻA䴩Wܪk ls oӤu㤤AYڭ̨ϥ yls -l * z NONɦWɮסA yls -l a* zNOH a }YɦWɮסA bWܪkAڭ̭ntH a }YɮסAhnoˡG(ݷft䴩Wܪku)

ls | grep -n '^a.*'
DG
H ls -l tX grep X /etc/ UɮsݩʪɦW
G
ѩ ls -l CXsɮɼY|Oy lrwxrwxrwx zA]ϥΦpUOYiXGG
ls -l /etc | grep '^l'
YȷQnCXXɮסAAHy |wc -l z Ӳ֥[BzYiC


sed u

bAѤF@ǥWܪk¦ΤAAөOHӪFiH@ANO sed 򩳤U|Ъ awk FI oӳåiO۷ΪڡI|ҨӻAg logfile.sh Rnɪp{ (ĤQE|ͨ)AjRrΡBέpANOγo_JڧIAAnn@ڡH^_^

ڭ̥ӽͤ@ sed nFA sed ]O@Ӻ޽uROAiHR standard input աI ӥB sed ٥iHNƶiNBRBsWB^Sw浥\OIܤa ڭ̥AѤ@U sed ΪkAAӲLγ~nFI

[root@www ~]# sed [-nefr] [ʧ@]
ﶵPѼơG
-n  GϥΦwR(silent)ҦCb@ sed ΪkAҦӦ STDIN 
      Ƥ@볣|QCXùWCpG[W -n ѼƫAhugL
      sed SBz@(Ϊ̰ʧ@)~|QCXӡC
-e  GbOCҦWi sed ʧ@sF
-f  GN sed ʧ@gb@ɮפA -f filename hiH filename  
      sed ʧ@F
-r  Gsed ʧ@䴩OWܪkykC(w]O¦Wܪkyk)
-i  GקŪɮפeAӤOѿùXC

ʧ@G  [n1[,n2]]function
n1, n2 Go|sbA@Nyܶiʧ@ơzA|ҨӻApGڪʧ@
         Oݭnb 10  20 椧i檺Ahy 10,20[ʧ@欰] z

function UoǩNNG
a   GsWA a ᭱iHrAӳoǦr|bs@X{(ثeU@)
c   GNA c ᭱iHrAoǦriHN n1,n2 I
d   GRA]ORڡAҥH d ᭱q`NNF
i   GJA i ᭱iHrAӳoǦr|bs@X{(ثeW@)F
p   GCLAYNYӿܪƦLXCq` p |PѼ sed -n @_B@
s   GNAiHiNu@Iq`o s ʧ@iHft
      WܪkIҦp 1,20s/old/new/g NOաI

sed OάݪOݤաIҥHSnӽmߤFIӪRPsW\aI

dҤ@GN /etc/passwd eCXåBCL渹APɡAбN 2~5 RI
[root@www ~]# nl /etc/passwd | sed '2,5d'
     1  root:x:0:0:root:/root:/bin/bash
     6  sync:x:5:0:sync:/sbin:/bin/sync
     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
.....(᭱ٲ).....

ݨFaHsed ʧ@ '2,5d' A d NORI] 2-5 浃LRFAҥHܪƴNS 2-5 o t~A`N@UA쥻ӬOnUF sed -e ~AS -e ]աIPɤ]n`NOA sed ᭱ʧ@AаȥH '' ӳ޸AI

pGDܤƤ@UA|ҨӻApGunR 2 AiHϥΡy nl /etc/passwd | sed '2d' zӹFA ܩYOnR 3 ̫@AhOy nl /etc/passwd | sed '3,$d' zաAry $ zN̫@I

dҤGGӤWDAbĤG(YO[bĤT)[Wydrink tea?zrˡI
[root@www ~]# nl /etc/passwd | sed '2a drink tea'
     1  root:x:0:0:root:/root:/bin/bash
     2  bin:x:1:1:bin:/bin:/sbin/nologin
drink tea
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
.....(᭱ٲ).....

KKIb a ᭱[WrNwNX{bĤG᭱oIpGOnbĤGeOHy nl /etc/passwd | sed '2i drink tea' zNաINONy a zܦy i zYiC W[@²ApGOnWNHWOH

dҤTGbĤG᭱[JrAҦpyDrink tea or .....zPydrink beer?z
[root@www ~]# nl /etc/passwd | sed '2a Drink tea or ......\
> drink beer ?'
     1  root:x:0:0:root:/root:/bin/bash
     2  bin:x:1:1:bin:/bin:/sbin/nologin
Drink tea or ......
drink beer ?
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
.....(᭱ٲ).....

oӽdҪIOyڭ̥iHsWu@IiHsWnXzOC@椧nHϱ׽uy \ zӶis檺W[IҥHAWҤlAڭ̥iHo{bĤ@檺̫᭱N \ sbաIO@wnI


OЦpsWPRApGnNOHݬݩUdҧaG

dҥ|GڷQN2-5檺eNyNo 2-5 numberzOH
[root@www ~]# nl /etc/passwd | sed '2,5c No 2-5 number'
     1  root:x:0:0:root:/root:/bin/bash
No 2-5 number
     6  sync:x:5:0:sync:/sbin:/bin/sync
.....(᭱ٲ).....

zLoӤkڭ̴NNƾNFID`eaIsed ٦nΪFFIڭ̥HeQnCX 11~20 A onzLyhead -n 20 | tail -n 10zkӳBzAܳ·аա sed hiH²檺XAQnXIOzL渹ӮIݬݩUdҥG

dҤGȦCX /etc/passwd ɮפ 5-7 
[root@www ~]# nl /etc/passwd | sed -n '5,7p'
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     6  sync:x:5:0:sync:/sbin:/bin/sync
     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

WzOӭnﶵy -n zAӻAo -n NOywRҦzI 򬰤nϥΦwRҦOHAiHۦUF sed '5,7p' NDF (5-7 |ƿX)I S[W -n ѼƮɡAXƥiOtܦhIAiHzLo sed H欰쪺ܥ\A NNY@ɮפYǦ渹XӬd\IܴΪ\IOܡH


F檺BzҦ~A sed ٥iHΦ欰i泡ƪjMèN\I 򥻤W sed jMPNP vi ۷ILIoˡG

sed 's/nQNr/sr/g'

WSr骺rAаOUӡIܩTӱ׽uNOs¦rꪺաI ڭ̨ϥΩUoӨo IP ƾڪdҡA@q@qӳBzz@@AAAѤ@UO̩ҿתjMèNaI

BJ@G[lTAQ /sbin/ifconfig  d IP H
[root@www ~]# /sbin/ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:90:CC:A6:34:84
          inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::290:ccff:fea6:3484/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
.....(HUٲ).....
# ]ڭ٨S IP Ao̧AӷYiڡIڭ̪IbĤGA
# ]NO 192.168.1.100 @ӤwIQrX@I

BJGGQrtX grep ^X䪺@
[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr'
          inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
# ȳѤU@IUӡAڭ̭nN}l addr: qqRANOUoˡG
# inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
# WRby ^.*inet addr: zաIWܪkX{I ^_^

BJTGN IP eHR
[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | \
>  sed 's/^.*addr://g'
192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
# JӻPWӨBJ@UAeFIUӫhOR򪺳AYG
# 192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
# ɩһݪWܪkGy Bcast.*$ zNOաI

BJ|GN IP ᭱HR
[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | \
>  sed 's/^.*addr://g' | sed 's/Bcast.*$//g'
192.168.1.100

zLoӽdҪmߤ]ijz̾ڦ@BJӬsAOINO[AMA@h@hհA pG諸aANHקA粒աA\AU~աCHWФA @jONF|ӨBJIaI ^_^

ڭ̦A~s sed PWܪktXmߡI]ڥun MAN sbXơA Ot # bѧڤQnAӥBťզڤ]nIɸӦpBzOHiHzLoXӨBJӹ@ݬݡG

BJ@Gϥ grep Nr MAN ҦbX
[root@www ~]# cat /etc/man.config | grep 'MAN'
# when MANPATH contains an empty substring), to find out where the cat
# MANBIN                pathname
# MANPATH               manpath_element [corresponding_catdir]
# MANPATH_MAP           path_element    manpath_element
# MANBIN                /usr/local/bin/man
# Every automatically generated MANPATH includes these fields
MANPATH /usr/man
....(᭱ٲ)....

BJGGRѤ᪺ơI
[root@www ~]# cat /etc/man.config | grep 'MAN'| sed 's/#.*$//g'






MANPATH /usr/man
....(᭱ٲ)....
# qWiHݥXӡA쥻ѪƳܦťզաIҥHAUӭnRťզ

[root@www ~]# cat /etc/man.config | grep 'MAN'| sed 's/#.*$//g' | \
> sed '/^$/d'
MANPATH /usr/man
MANPATH /usr/share/man
MANPATH /usr/local/man
....(᭱ٲ)....

AH sed uo˪@ܡHiI sed ƦܥiHקɮתeOIӤϥκ޽uROθƬyɦVI LAѩoӰʧ@|קlɮסAҥHЧAdUnHKtγ]wɨӴճI ڭ٬OϥΧAU regular_express.txt ɮרӴլݬݧaI

dҤGQ sed N regular_express.txt C@浲Y . h !
[root@www ~]# sed -i 's/\.$/\!/g' regular_express.txt
# WY -i ﶵiHA sed hק᭱ɮפeӤOѿùXI
# oӽdҬOΦbNIбzۦ cat ɮץhd\GoI

dҤCGQ sed b regular_express.txt ̫@[Jy# This is a testz
[root@www ~]# sed -i '$a # This is a test' regular_express.txt
# ѩ $ NO̫@A a ʧ@OsWA]ɮ׳̫sWoI

sed y -i zﶵiHקɮפeAo\D`UI|ҨӻApGA@ 100 U檺ɮסAAnb 100 [YǤrAɨϥ vim i|ƱI]ɮפӤjFIHNQ sed ڡIzL sed ק/N\AAƦܤݭnϥ vim h׭qIܴΧaI

`Ao sed ΰաIӥBܦh shell script |ϥΨoӫO\ sed iHUtκ޲z޲zn`u@InJӪDzߩOI


Wܪk

ƹWA@Ū̥unAѰ¦WܪkjNwg۷FALAYǮɨ謰Fn²ƾӫOާ@A AѤ@UϥνdsWܪkܦ|KOI|²檺ҤlnFAbW`DT̫@ӨҤlAڭ̭nhťզP歺 # CAϥΪO

grep -v '^$' regular_express.txt | grep -v '^#'

ݭnϥΨ޽uROӷjM⦸IpGϥΩWܪkAڭ̥iH²ƬG

egrep -v '^$|^#' regular_express.txt

WܪkiHzLsե\y | zӶi@jMIӦb޸޽uNqy orzաI O_ܪ²OH~Agrep w]Ȥ䴩¦WܪkApGnϥΩWܪkAAiHϥ grep -E A Lijϥ egrep IϤOnOСI egrep P grep -E OROOWYաI

xFWܪkAoөWܪkAAӤ]|QANOhXӭnSŸܡH ^_^y OҥHAڭ̴Nӻ@UAWܪkXӯSŸHѩ󩳤Ud٬OϥΨ regular_express.txt AOڭ̥iNɮ׭קLF @_@AҥHAЭsUɮרӽm߳I

RE rNqPd
+NqGơy@өΤ@ӥHWze@ RE r
dҡGjM (god) (good) (goood)... rC o+ Ny@ӥHW o zҥHAU榨G|N 1, 9, 13 CXӡC
egrep -n 'go+d' regular_express.txt
?NqGysөΤ@ӡze@ RE r
dҡGjM (gd) (god) oӦrC o? NyŪ 1 o zҥHAW榨G|N 13, 14 CXӡC So{AoӮר( 'go+d' P 'go?d' )GXP 'go*d' ۦPH QQݡAoOI ^_^
egrep -n 'go?d' regular_express.txt
|NqGΩ( or )觋XƭӦr
dҡGjM gd good oӦrA`NAOyΡzI ҥHA 1,9,14 oT泣iHQCLXӳIpGٷQnX dog OH
egrep -n 'gd|good' regular_express.txt
egrep -n 'gd|good|dog' regular_express.txt
()NqGXysաzr
dҡGjM (glad) (good) oӦrA] g P d OƪAҥHA ڴNiHN la P oo C ( ) AåH | Ӥj}ӡANiHաI
egrep -n 'g(la|oo)d' regular_express.txt
()+NqGhӭƸsժPO
dҡGNyAxyzxyzxyzxyzCz echo sXAMAϥΦpUkjM@UI
echo 'AxyzxyzxyzxyzC' | egrep 'A(xyz)+C'
WҤlNOAڭn}YO A O C A@ӥHW "xyz" rꪺN

HWoǴNOWܪkSrCt~AnSOjժOA ! bWܪkäOSrA ҥHApGAQndXɮפt ! P > rɡAiHoˡG

grep -n '[!>]' regular_express.txt

o˥iHAѤFܡH``ݨ즳DؼgGyϦVܳo˹_H '[!a-z]'HzA IOn '[^a-z] ~O諸Iܩh󥿳Wܪki峹AаѦҤ好ѦҸ(2)

@
󪺮榡ƻPBz

Uڭ̨ӱNi@²檺sƧaIUoǰʧ@iHNATiƪʧ@A ݭnsH vim hsAzLƬyɦVtXUЪ printf \AH awk OA NiHATHAQnҼ˨ӿXFIլݬݧaI


榡ƦCLG printf

bܦhɭԡAڭ̥iݭnNۤvƵL榡ƿXI |ҨӻAҸըƪXAmWPؤΤƤA`OiHyL@Ӥ}GtmaH ҦpڷQnXU˦G

Name     Chinese   English   Math    Average
DmTsai        80        60     92      77.33
VBird         75        55     80      70.00
Ken           60        90     70      73.33

WƥDnAU줧iϥ tab ΪťijC бNWs printf.txt ɦWA@Uڭ̷|QγoɮרӶiXӤpmߪC ]C쪺lƪרëDOpTw (Chinese ״NO Name nh)A ӧڴNOQnpܥXoǸơAɡANoݭnCL榡޲z printf FI printf iHڭ̱NƿXG榡ơAӥBӤ䴩@ǯSrš㧐Uڭ̴NӬݬݡI

[root@www ~]# printf 'CL榡' ڤe
ﶵPѼơG
榡譱XӯS˦G
       \a    ĵinX
       \b    ˰h(backspace)
       \f    Mù (form feed)
       \n    Xs@
       \r    Y Enter 
       \t     [tab] 
       \v     [tab] 
       \xNN  NN ƪƦrAiHഫƦrrC
 C {yA`ܼƮ榡
       %ns    n OƦrA s N string AYh֭ӦrF
       %ni    n OƦrA i N integer AYh־ƦơF
       %N.nf  n P N OƦrA f N floating (BI)ApGpƦơA
             ]ڦ@nQӦơApIAY %10.2f oI

Uӧڭ̨ӶiXӱ`mߡC]ҦƳO@r (o]O̱`A)A]̱`ΨӤjƪŸNO [Tab] աI] [Tab] iHNƧ@ӾƦCIpQ printf OHѦҩUoӽdҡG

dҤ@GNWYƪɮ (printf.txt) eȦCXmWPZG( [tab] j)
[root@www ~]# printf '%s\t %s\t %s\t %s\t %s\t \n' $(cat printf.txt)
Name     Chinese         English         Math    Average
DmTsai   80      60      92      77.33
VBird    75      55      80      70.00
Ken      60      90      70      73.33

ѩ printf äO޽uROA]ڭ̱onzLW\ANɮפeXӵ printf @򪺸Ƥ~C pWҥܡAڭ̱NCӸƳH [tab] @jAOѩ Chinese פӪAɭP English hF@ [tab] ӱNƱƦCIڡ㵲GNݨƹGtFI

t~Ab printf 򪺨@q榡A%s N@ӤTwתrAӦrPrꤤNH \t o [tab] jŸӳBzIAnOoOAѩ \t P %s ٦ŮA]CӦr궡|@ [tab] P@Ӫť䪺jI

JMC쪺פTw|yWzxZAڱNCTwNnաISSIo˷QD`nI ҥHڭ̴NNƵLiTwת]paI

dҤGGNWzĤGHAOHrBơBpIܡG
[root@www ~]# printf '%10s %5i %5i %5i %8.2f \n' $(cat printf.txt |\
> grep -v Name)
    DmTsai    80    60    92    77.33
     VBird    75    55    80    70.00
       Ken    60    90    70    73.33

Wo@榡QzݱoܨWISYI@Ӥ@ӨӸIW榡@A %10s NO@Ӫ׬ 10 ӦrrA%5i NO׬ 5 ӦrƦrAܩ󨺭 %8.2f hN׬ 8 Ӧr㦳pIA𫟺pIӦreסCڭ̥iHϥΩUӤ %8.2f NqG

reסG 12345678
%8.2fNqG00000.00

pWҭzAe׶Ȧ 8 ӦrAƳ 5 ӦrApI (.) @ApIUƫhC oخ榡g`ϥΩƭȵ{]pIoAѥGHۤvլݬݦpGnNpIܦ 1 SӦpBzH

printf FiH榡ƳBz~AL٥iH̾ ASCII ƦrPϧιܸƳ(3)I |Ҩӻ 16 i쪺 45 iHo줰 ASCII ܹ (Or)H

dҤTGCX 16 iƭ 45 NrH
[root@www ~]# printf '\x45\n'
E
# oF]ܦnLiHNƭഫrApGA|g script ܡA
# iHۦդ@UA 20~80 ƭȥNrOԣI ^_^

printf ϥά۷sxI]A@U᭱|쪺 awk HΦb C {yϥΪùXA OQ printf OIo̤]uOCX@ǥi|Ψ쪺榡ӤwA쪺ܡAiHۦh@@ǴջPm߳I ^_^

CL榡Ƴo printf OAEݤUn]Sܭn LApGAݭnۦ漶g@dznAݭnN@ǸƦbùWY}}GGXܡA printf i]O@ӫܴΪuI

awkGnΪƳBzu

awk ]O@ӫD`ΪƳBzuI۸ sed ``@Ω@Ӧ檺BzA awk hɦV@ƭӡyzӳBzC]Aawk ۷AXBzpƾڸƳBzOIawk q`B@ҦOo˪G

[root@www ~]# awk '1{ʧ@1} 2{ʧ@2} ...' filename

awk ᭱ӳ޸å[WjA {} ӳ]wQnƶi檺Bzʧ@C awk iHBz򱵪ɮסA]iHŪӦ۫eӫO standard output C peA awk DnOBzyC@檺줺ơzAӹw]y쪺jŸ "ť" "[tab]" zI|ҨӻAڭ̥ last iHNnJ̪ƨXӡAGpUҥܡG

[root@www ~]# last -n 5 <==ȨXe
root     pts/1   192.168.1.100  Tue Feb 10 11:21   still logged in
root     pts/1   192.168.1.100  Tue Feb 10 00:46 - 02:28  (01:41)
root     pts/1   192.168.1.100  Mon Feb  9 11:41 - 18:30  (06:48)
dmtsai   pts/1   192.168.1.100  Mon Feb  9 11:41 - 11:41  (00:00)
root     tty1                   Fri Sep  5 14:09 - 14:10  (00:01)

YڷQnXbPnJ̪ IP ABbP IP H [tab] j}Ah|ܦoˡG

[root@www ~]# last -n 5 | awk '{print $1 "\t" $3}'
root    192.168.1.100
root    192.168.1.100
root    192.168.1.100
dmtsai  192.168.1.100
root    Fri

WO awk ̱`ϥΪʧ@IzL print \NƦCXӡI쪺jhHť [tab] ӹj}C ]׭@ڳnBzA]ANݭn "" IکҷQnOĤ@HβĤTA OAĤ檺eǩǪoO]Ʈ榡DڡIҥHoϥ awk ɭԡAХT{@UAƷApGOsʪơAФnŮ [tab] bA_hAN|oӨҤloˡA|oͻ~PI

t~AѤWoӨҤlA]|DAbC@檺C쳣OܼƦW٪ANO $1, $2... ܼƦWCHWҤlӻA root O $1 A]LOĤ@Iܩ 192.168.1.100 OĤTA ҥHLNO $3 աI᭱HI٦ܼƳINO $0 A$0 Ny@CơzNHWҤlӻAĤ@檺 $0 NNOyroot .... z@ڡI ѦiAWA awk Bzy{OG

  1. ŪJĤ@AñNĤ@檺ƶJ $0, $1, $2.... ܼƷF
  2. ̾ "" AP_O_ݭni᭱ "ʧ@"F
  3. Ҧʧ@PF
  4. Y٦򪺡yzơAhƤW 1~3 BJAҦƳŪC

gLo˪BJAA|oA awk OyH欰@BzzA ӡyH쬰̤pBzzCnFA awk 򪾹Dڨ쩳oӸƦXHXOHoNݭn awk ܼƪա

ܼƦWNNq
NFC@ ($0) ֦`
NRثe awk ҳBzOyĴXz
FSثejrAw]Oť

ڭ~HW last -n 5 ҤlӰApGڷQnG

hiHoˡG

n`NAawk 򪺩Ҧʧ@OH޸y ' zAAѩ޸P޸O諸A ҥHA awk 榡epGQnH print CLɡAOoDܼƪrA]tW@p` printf 쪺榡Aݭnϥ޸өwqXӳI]޸wgO awk OTwΪkFI
[root@www ~]# last -n 5| awk '{print $1 "\t lines: " NR "\t columns: " NF}'
root     lines: 1        columns: 10
root     lines: 2        columns: 10
root     lines: 3        columns: 10
dmtsai   lines: 4        columns: 10
root     lines: 5        columns: 9
# `NAb awk  NR, NF ܼƭnΤjgABݭnr $ աI

o˥iHA NR P NF tOFaHnFAUӽͤ@ͩҿת "" FaI


JMݭnΨ "" OA۵MNݭn@޿BoҦpUoǡG

B椸NNq
>j
<p
>=
<=
==
!=

ȱo`NOӡy == zŸA]G

nFAڭ̹ڨӹBΤ@U޿P_aI|ҨӻAb /etc/passwd OH_ ":" ӧ@쪺jA ɮפĤ@쬰bAĤThO UIDC]ڭnd\AĤTp 10 HUƾڡAåBȦCXbPĤTA iHo˰G

[root@www ~]# cat /etc/passwd | \
> awk '{FS=":"} $3 < 10 {print $1 "\t " $3}'
root:x:0:0:root:/root:/bin/bash
bin      1
daemon   2
....(HUٲ)....

aILAĤ@STܥXөOHoO]ڭŪJĤ@檺ɭԡAܼ $1, $2... w]٬OHť䬰jAҥHMڭ̩wqF FS=":" FA OoȯbĤG~}lͮġCOHڭ̥iHw]w awk ܼưڡI Q BEGIN orIo˰G

[root@www ~]# cat /etc/passwd | \
> awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t " $3}'
root     0
bin      1
daemon   2
......(HUٲ)......

ܦaIӰF BEGIN ~Aڭ٦ END OIt~ApGn awk Ӷiyp\zOHHUҤlӬݡA ]ڦ@~ƪɦW pay.txt AeOo˪G

Name    1st     2nd     3th
VBird   23000   24000   25000
DMTsai  21000   20000   23000
Bird2   43000   42000   41000

pڭpCӤH`BOHӥBٷQn榡ƿXIڭ̥iHo˦Ҽ{G

[root@www ~]# cat pay.txt | \
> awk 'NR==1{printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,"Total" }
NR>=2{total = $2 + $3 + $4
printf "%10s %10d %10d %10d %10.2f\n", $1, $2, $3, $4, total}'
      Name        1st        2nd        3th      Total
     VBird      23000      24000      25000   72000.00
    DMTsai      21000      20000      23000   64000.00
     Bird2      43000      42000      41000  126000.00

WҤlXӭnƶӭnG

Q awk oӪNANiHڭ̳Bzܦh`u@FOIuOnΪܡ ~A awk X榡A``|H printf ӻUAҥHA ̦nA printf ]yLx@UnաIt~A awk ʧ@ {} ]O䴩 if () I |ҨӻAWOiH׭qoˡG

[root@www ~]# cat pay.txt | \
> awk '{if(NR==1) printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,"Total"}
NR>=2{total = $2 + $3 + $4
printf "%10s %10d %10d %10d %10.2f\n", $1, $2, $3, $4, total}'

AiHJӪ@UWӿJԣPqhAѨػykaIڭӤHOɦVϥβĤ@ػykA ]|Τ@ʰڡI ^_^

~A awk ٥iHڭ̶ijpIuO۷nΡILAݩiWҵ{FA ڭ̳o̴NAh[СCpGA쪺ܡAаȥѦҩ\Ūs (4)C


ɮפu

ɭԷ|ΨɮתڡHq`OyP@ӮM˳n骺PA]wɻPlɪtzC ܦhɭԩҿתɮפAq`OΦb ASCII ¤rɪWIɮתOǡH̱`NO diff oI t~AF diff 蠟~Aڭ٥iHǥ cmp ӤD¤rɡIPɡA]ǥ diff إߪRɡA HBzɤB (patch) \઺ɮשOINӪI


diff NOΦbɮפtAåBOH欰Ӥ諸I@OΦb ASCII ¤rɪWC ѩOH欰諸A] diff q`OΦbP@ɮ(γn)sªtWI |ҨӻApڭ̭nN /etc/passwd Bz@ӷsABz觋G Nĥ|RAĤhNyno six linezAsɮשm /tmp/test ̭Aӫ򰵡H

[root@www ~]# mkdir -p /tmp/test <==إߴեΪؿ
[root@www ~]# cd /tmp/test
[root@www test]# cp /etc/passwd passwd.old
[root@www test]# cat /etc/passwd | \
> sed -e '4d' -e '6c no six line' > passwd.new
# `N@UA sed ᭱pGnWLӥHWʧ@ɡACӰʧ@eo[ -e ~I
# zLoӰʧ@Ab /tmp/test  ̭Ksª passwd ɮצsbFI

UӰQפ@U diff ΪkaI

[root@www ~]# diff [-bBi] from-file to-file
ﶵPѼơG
from-file G@ɦWA@lɮתɦWF
to-file   G@ɦWA@تɮתɦWF
`NAfrom-file  to-file iH - NA - NyStandard inputzNC

-b  G@AȦhӪťժt(Ҧp "about me" P "about     me" ۦP
-B  Gťզ檺tC
-i  GjpgPC

dҤ@G passwd.old P passwd.new tG
[root@www test]# diff passwd.old passwd.new
4d3    <==ĥ|QR (d) FAǬOk䪺ĤT
< adm:x:3:4:adm:/var/adm:/sbin/nologin  <==oCX(<)ɮ׳QR@椺e
6c5    <==ɮתĤQN (c) kɮתĤ
< sync:x:5:0:sync:/sbin:/bin/sync  <==(<)ɮײĤ椺e
---
> no six line                      <==k(>)ɮײĤ椺e
# oaI diff Nڭ̭𫍧Bz粒FI

diff ɮׯuO²ILAAn diff hӧۤzɮסA]񤣥XԣNNI t~A diff ]iHӥؿUtI|ҨӻAڭ̷QnAѤ@UP}浥 (runlevel) eԣPH]AwgD浥 3 P 5 Ұʸ}Om /etc/rc3.d /etc/rc5.d A hڭ̥iHNӥؿ@UG

[root@www ~]# diff /etc/rc3.d/ /etc/rc5.d/
Only in /etc/rc3.d/: K99readahead_later
Only in /etc/rc5.d/: S96readahead_later

ڭ̪ diff oaI٥iH藍PؿUۦPɦWeAo˯uܤK


۹ diff sxγ~A cmp GNΪSohF cmp Dn]ObɮסALDnQΡy줸աzhA ]AM]iH binary file o(٬OnAA diff DnOHyzA cmp hOHy줸աzhAoäۦPI)

[root@www ~]# cmp [-l] file1 file2
ﶵPѼơG
-l  GNҦPI줸ճBCXӡC] cmp w]ȷ|XĤ@ӵo{PIC

dҤ@G cmp @U passwd.old  passwd.new
[root@www test]# cmp passwd.old passwd.new
passwd.old passwd.new differ: byte 106, line 4

ݨFܡHĤ@ӵo{PIbĥ|AӥB줸ռƬOb 106 Ӧ줸ճBIo cmp ]iHΨӤ binary աI ^_^


patch oӫOP diff iOKiYڡIڭ̫eAdiff iHΨӤӪtA |ҨӻAڭ̩ҫإߪ passwd.old passwd.new NOӤPɮסC ApGnyɯšzOHNOyNªɮפɯŦsɮzɡAӭn򰵩OH ]աINOyªtAñNtɻs@ɤBɡAAѸɤBɧsɮסzYiC |ҨӻAڭ̥iHo˰աG

dҤ@GH /tmp/test  passwd.old P passwd.new  s@ɤBɮ
[root@www test]# diff -Naur passwd.old passwd.new > passwd.patch
[root@www test]# cat passwd.patch
--- passwd.old  2009-02-10 14:29:09.000000000 +0800 <==sɮתT
+++ passwd.new  2009-02-10 14:29:18.000000000 +0800
@@ -1,9 +1,8 @@   <==sɮ׭nקƪɩwdAɦb 1-9 Asɦb 1-8 
 root:x:0:0:root:/root:/bin/bash
 bin:x:1:1:bin:/bin:/sbin/nologin
 daemon:x:2:2:daemon:/sbin:/sbin/nologin
-adm:x:3:4:adm:/var/adm:/sbin/nologin      <==ɮקR
 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
-sync:x:5:0:sync:/sbin:/bin/sync           <==ɮקR
+no six line                               <==ksɥ[J
 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
 halt:x:7:0:halt:/sbin:/sbin/halt
 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

@ӻAϥ diff s@XӪɮ׳q`ϥΰɦW .patch oCܩ󤺮eNpPWЪˤlC 򥻤WNOH欰Aݬݭ𨷿@˻P@˪A@˪aAMN@˪aNI HW欰ҡAsɮ׬ݨ - |RAݨ + |[JInFApNªɮקsseOH NON passwd.old 令P passwd.new ۦPIiHo˰G

[root@www ~]# patch -pN < patch_file    <==s
[root@www ~]# patch -R -pN < patch_file <==٭
ﶵPѼơG
-p  G᭱iHyXhؿzNC
-R  GN٭ANsɮ٭즨ªC

dҤGGNs@XӪ patch file Ψӧsª
[root@www test]# patch -p0 < passwd.patch
patching file passwd.old
[root@www test]# ll passwd*
-rw-r--r-- 1 root root 1929 Feb 10 14:29 passwd.new
-rw-r--r-- 1 root root 1929 Feb 10 15:12 passwd.old <==ɮפ@Ҥ@ˡI

dҤTG_ɮתe
[root@www test]# patch -R -p0 < passwd.patch
[root@www test]# ll passwd*
-rw-r--r-- 1 root root 1929 Feb 10 14:29 passwd.new
-rw-r--r-- 1 root root 1986 Feb 10 15:18 passwd.old
# ɮ״No˫_ªo

o̷|ϥ -p0 OH]ڭ̦bsªƮɬObP@ӥؿUA ]ݭnhؿաIpGOϥξؿ (diff ¥ؿ sؿ) ɡA Non̾ګإ patch ɮשҦbؿӶiؿRoI

ԲӪ patch Ϊkڭ̷|b򪺲ĤglXsĶ (ĤGQG)AjaСA o̶ȬOеAAڭ̥iHQ diff ӤɮפtA ii@BQγoӥ\ӻs@׸ɮ (patch file) AjaeiPɯũOIܤaI ^_^


ɮצCLdzơG pr

pGAgϥιL@ǹϧΤѳBzn骺ܡAܮeo{Aڭ̦bCLɭԡA iHPɿܻP]wC@CLɪYaI]iH]wXOIApGڬOb Linux UCL¤rɩO iiH㦳DڡHiiH[JXڡHIMiHڡIϥ pr NFoӥ\FCLA pr ѼƹbӦhFA]A@ӻAȨϥγ²檺觋ӳBzӤwC|ҨӻApGQnCL /etc/man.config OH

[root@www ~]# pr /etc/man.config


2007-01-06 18:24                 /etc/man.config                  Page 1


#
# Generated automatically from man.conf.in by the
# configure script.
.....HUٲ......

WSr騺@OANOϥ pr BzҳyDաID|yɮ׮ɶzByɮɦWzΡyXzTjءC h pr ϥΡAаѦ pr ڡI ^_^


I^U

D
( nݵ׽бNƹʨyGzUťճBAUťճBYi )


²DG

ѦҸƻP\Ū

2002/07/29GĤ@F
2003/02/10GssƻP[J FAQ F
2005/01/28GsJ¦WܪkeIIb regular_express.txt BzPmߤWI
2005/03/30G׭qF grep -n 'goo*g' regular_express.txt o@q
2005/05/23G׭qF grep -n '^[a-z]' regular_express.txt ҭn^OpgAegjgAFI
2005/08/22G[JF awk, sed u㪺СA٦ diff P cmp OI
2005/09/05G[J printf A \xNN I
2006/03/10GN쥻 sed ʧ@(action)A s ѡyjMz令yNzFI
2006/10/05Gb sed hF@ -i ѼƻA]hF@ӽdҤKiHѦҡCP°QװϪthymeSI
2008/10/08G[J grep --color=auto I
2009/02/07GNª FC4 峹ʨB
2009/02/10GsƪAåB[JytAHίS [::] I藍ֽdҪC
2009/05/14GPº Jack ^A cmp ӬOϥΡy줸 byteszӫD줸 bitsAP Jack SC
2009/08/26G[JҼDؤFI
2010/04/16Glinux_taskSѪNA N쥻 * q@dzAiŪʸΡIP±zI