wA@As峹аѦB
Wܪk(κ٬`Wܪk)OzL@ǯSrƦCAΥH jM/N/R @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ӻAbOܭnC]tη|ͫܦhTAoǰTnAȬOiA ɡA޲ziHzLWܪk\ӱNnT^XӡAòͫKd\A²ƺ޲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
2. ¦WܪkG
@@2.1 H grep ^r
@@2.2 nSr(characters)
3. WܪkG
4. 榡ƦCLG printf
5. sed u²
6. awk u²
7. ƤPCL\
@@7.1 ɮפG diff, cmp, patch
@@7.2 ɮצCLdzơG pr
8. I^U
9. ѦҸ귽
10.Dm
11. w糧媺ijGhttp://phorum.vbird.org/viewtopic.php?t=23885

e
AѤF Linux 򥻫O ( Shell ) åBxF vi A۫HzVLPOͤFaHH UӡAUn}lФ@ӫܭn[ANOҿתyWܪkzoI


OWܪk
@Ӧg窥tκ޲zA|iDzGyWܪkuOnIz ܭnOH]`ͬNϥΪڡI|ӨҤlӻA bz`Bzѧ@~ɡAӷ|``ϥΨyjM/Nz\aH o|ʭn@}GANOWܪku@FI

²檺AWܪkNOBzrꪺkALOH欰A ӶirꪺBz欰ALzL@ǯSŸUAiHϥΪ̻F jM/N YSwrꪺBz{ǡI

|ҨӻAڭn VBird Vbird oӦrˡAOnLrAӦpzH pGbSWܪkҤ(Ҧp MS word)Azγ\NonϥΩjpgkA Ϊ̬OOH VBird Vbird jMMCOAjpgi|jM VBIRD/vbird/VbIrD ݭnrAӳyϥΪ̪xZC

A|Өtα`ҤlnFA]po{tΦb}ɭԡAѬO|X{@ mail {~A Ӷ}L{{dzOb /etc/rc.d/ UA]NOAbӥؿUYɮפ㦳 mail orAnFAɡAzXӧtorɮסHHzMiH@ɮפ@ɮת}ҡA MhjM mail orAuO.....ӥؿUɮץiण 100 ӻ pGAѥWܪkޥAun@ONXӰաI ygrep 'mail' /etc/rc.d/*z grep NO䴩Wܪku{@Ip²aI ^_^y

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

Wܪktκ޲zγ~
򬰦ڻݭnDzߥWܪkOH@ϥΪ̨ӻAѩϥΨ쥿Wܪk|iणhA ]PLyOALA󨭬tκ޲zzӻA WܪkhO@ӡyiǪnFIz 򻡩OHѩtΦpGbcpUACѲͪTT|hALkQaBA ӧڭ̤]DAtΪy~Tnɮz e(oڭ̦bĤg|Խ)OFtβͪҦTAMA o]tAtάO_QyJIzơ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٤󦹡Az@w{תAѤAz|RWLI

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

pGzdNںWAӤo{Aثeyj먮D]@NOyU/siHzFA ӦpGڭ̥iHbDݡ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Τ䴩lARMA䴩Wܪk\I

M٤󦹰աAܦhAnBHήM󳣤䴩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¦¦Iz{b@wf۷hO ^_^I ӧڭ̽ͨ쪺oӥWܪkAPe@ BASH shell NIOƾǪEEk@ˡAO Linux ¦¦AM]OA LApGǦFA@wOyjjUzIoNnOep̭ǪZA GߡAqGߤAZ\ߨ覨IҥHաA ׬OtΪ{ѻPtΪ޲zALܴΪUڡIЦnnDz߳oӰ¦aI ^_^

Wܪk
WܪkF²檺@զrBz~A٥iH@sժrBzA ҦpijM VBird netman lman jMA`NAOy(or)zӤOyM(and)zBzA ɴNݭnWܪkUաIǥѯS ( P | rUA NFo˪تInաIMMḀΥ\hoI
@InVjaiANOGyWܪkPUΦrO@˪FIz oܭnI]UΦr (wildcard) ҥNNqPWܪkäۦP nܲM~IҥHADzߥAбNe@ bash UΦrNqѱaI

¦Wܪk
JMWܪkOBzrꪺ@ӼзǪܤ觋ALݭn䴩u{ӻUA ҥHAڭ̳o̴NФ@ӳ²檺r^\઺u{ANO grep oI bЧ grep 򥻥\धANiJWܪkSrŪBzOFC


H grep ^r
JMnϥ grep MNonAѤ@U grep yko
[root@test root]# grep [-acinv] 'jMr' filename
ѼƻG
-a GN binary ɮץH text ɮת觋jM
-c Gp 'jMr' 
-i GjpgPAҥHjpgۦP
-n GKX渹
-v GϦVܡAYܥXS 'jMr' e@I
--color=auto iNT^ƦCXC
dҡG
[root@test root]# grep 'root' /var/log/secure
N /var/log/secure oɮפ root @qX

[root@test root]# grep -v 'root' /var/log/secure
YӦS root ~NƨqXӨùWI

[root@test root]# last | grep root
YӦ榳 root ~NƨqXӨùWI
grep O@ӫܱ`]ܱ`ΪOAḼn\NOirƪA MNŦXϥΪ̻ݨDrCLXӡC ݭnOygrep bƤdM@ӦrɡAOH "" Ӷiƪ^Iz]NOAp@ɮפ 10 A𫟺㦳AҷjMrAhNܦbùWALNFI

grep FiHiɮתƷjM~A]``QΦb input/output ƳBzAҦp` ޽uRO ( pipe ) NiH``LܼvI HW椤ҤlӬݡAڭ̥iHo{eӨҤlOdMɮתeAS[W -v ܥXӪGOyۤϪIzAӲĤTӨҤlhOH pipe \iƪBzI

nFAڭ̴N}lH grep Ӷi楿Wܪk²aIڭ̥HUoɮרӧ@dҡG
[root@test root]# 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.
GNU is free air not free beer.
Her hair is very beauty.
I cant finish the test.
Oh! The soup taste good.
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.
You are the best is mean you are the no. 1.
The world 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

ݭnSO`NOAWoɮ׳Ob Windows ҤUs𫍧A åBgLSBzLA]ALMO¤rɡAOt@ Windows ҤUn``ۦ[J@ǯSrAҦp_r(^M)NO@ҡI ҥHAziHNWrH vi xs regular_express.txt oɮסA LAijIUsUG ~A]PytsXO@˪AҥHAznNyt令^ytA ~i橳UաA_hAi|ܪePUXŪpI קytkG
[root@test root]# LANG=en
[root@test root]# export LANG
nFA{b}lڭ̤@ӮרҤ@ӮרҪӤЧaI

nSr(characters)
gLFWX²檺dҡAڭ̥iHN¦WܪkSrŷJpUG

RE rNqPd
^wordݷjMr(word)b歺I
dҡGgrep -n '^#' regular_express.txt
jM歺 # }l@I
word$ݷjMr(word)bI
dҡGgrep -n '!$' regular_express.txt
N ! @CLXӡI
.NyN@ӡzršA@wO@ӥNršI
dҡGgrep -n 'e.e' regular_express.txt
jMriHO (eve) (eae) (eee) (e e)A Ȧ (ee) IY e P e y@wzȦ@ӦrAӪťզr]OrI
\ršANSŸSNqhI
dҡGgrep -n \' regular_express.txt
jMt޸ ' @I
*ƹsөΦhӪe@ RE r
dҡGgrep -n 'ess*' regular_express.txt
Xt (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
\{n,m\}s n m Ӫye@ RE ršz
Y \{n\} hOs n Ӫe@ RE ršA
YO \{n,\} hOs n ӥHWe@ RE ršI
dҡGgrep -n 'go\{2,3\}g' regular_express.txt
b g P g 2 Ө 3 Ӫ o sbrAY (goog)(gooog)
[]rX RE SrŪŸ
[list]
dҡGgrep -n 'g[ld]' regular_express.txt
jMt (gl) (gd) @
ݭnSOdNOAb [] yԥN@ӫݷjMrzA
ҦpG a[afl]y NjMriHO aay, afy, aly
Y [afl] N a f l NI


[ch1-ch2]
dҡGgrep -n '[0-9]' regular_express.txt
jMtNƦr@IݯSOdNAbrX []  - OSNqALNӦrҦsrIoӳsP_P ASCII sXA ]AzsXݭn]wT(b bash AݭnTw LANG P LANGUAGE ܼƬO_TI) ҦpҦjgrh [A-Z]

[^]
dҡGgrep -n 'oo[^t]' regular_express.txt
jMriHO (oog) (ood) O (oot) A ^ b [] ɡA NNqOyϦVܡzNҦpAڤnjgrAh [^A-Z] OAݭnSO`NOApGH grep -n [^A-Z] regular_express.txt ӷjMA oo{ɮפҦ泣QCXAH]o [^A-Z] OyDjgrzNA ]C@槡DjgrAҦpĤ@檺 "Open Source" N p,e,n,o.... pgrA H޸ (") rAҥHMŦX [^A-Z] jMI

ЯSOdNOAyWܪkSrz P@bOCJOyUΦrzäۦPA ҦpAbUΦrA* NO 0 ~ LhӦrNAObWܪkA * hO 0 hӪe@ RE rŪNϥΪNqäۦPAndVFI (ڤ@}lNWܪkɴNܮedVI]o̬Os̮edaASOp߰ڡI)

|Ҩӻ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) t~AҦpUΦrϦVܡA [!range] Aܩ󥿳WܪkhO [^range] C oˬO_AѥWܪkPUΦrtաHH

Wܪk
ƹWA@Ū̥unAѰ¦WܪkjNwg۷FALAYǮɨA Fn²ƾӫOާ@AAѤ@UϥνdsWܪkܦA|KOI |²檺ҤlnFAbW`DT̫@ӨҤlAڭ̭nhťզP歺 # CA ϥΪO ݭnϥΨ޽uROӷjM⦸I pGϥΩWܪkAڭ̥iH²ƬG QΤ䴩Wܪk egrep PSr | ӰϹjզrAp@ӡAO_KܦhOH

o̥nSOjաA grep 䴩O¦WܪkA egrep 䴩WܪkC ƹWA egrep O grep -E ROOWAFKϥΡAڭ٬OH egrep Ӹ grep ϤaI

xFWܪkAoөWܪkAzӤ]|QA NOhXӭnSŸܡH ^_^y OҥHAڭ̴Nӻ@UAWܪkXӯSŸH

RE rNqPd
+ơy@өΤ@ӥHWze@ RE r
dҡGegrep -n 'go+d' regular_express.txt
jM (god) (good) (goood)... rC o+ Ny@ӥHW o zҥHAW榨G|N 1, 9, 13 CXӡC
?ysөΤ@ӡze@ RE r
dҡGegrep -n 'go?d' regular_express.txt
jM (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 ^_^
|Ω( or )觋XƭӦr
dҡGegrep -n 'gd|good' regular_express.txt
jM gd good oӦrA`NAOyΡzI ҥHA 1,9,14 oT泣iHQCLXӳIpGٷQnX dog OHNo˰ڡG
egrep -n 'gd|good|dog' regular_express.txt
( )Xysաzr
dҡGegrep -n 'g(la|oo)d' regular_express.txt
jM (glad) (good) oӦrA] g P d OƪAҥHA ڴNiHN la P oo C ( ) AåH | Ӥj}ӡANiHաI
~Aoӥ\٥iHΨӧ@yhӭƸsաzPOI|ҨӻG
echo 'AxyzxyzxyzxyzC' | egrep 'A(xyz)+C'
WҤlANOAڭn}YO A O C A@ӥHW "xyz" rꪺN

HWoǴNOWܪkSrCt~AnSOjժOA ! bWܪkäOSrA ҥHApGzQndXɮפt ! P > rɡAiHoˡG o˥iHAѤFܡHI``ݨ즳DؼgGyϦVܳo˹_H '[!a-z]'HzA IOn '[^a-z] ~O諸I
@
榡ƦCLG printf
bܦhɭԡAڭ̥iݭnNXƵL榡ƿX |Ҩӻ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
AUt쥿TmhIO]C쪺lƨëDOpTwA ӧڴNOQnpܥXoǸơAɡANoݭnCL榡޲z printf FI printf iHڭ̱NƿXG榡ơAӥBӤ䴩@ǯSrš㧐Uڭ̴NӬݬݡI
[root@linux ~]# printf 'CL榡' ڤe
ѼơG
榡譱XӯS˦G
       \a    ĵinX
       \b    ˰h(backspace)
       \f    Mù (form feed)
       \n    Xs@
       \r    Y Enter 
       \t     [tab] 
       \v     [tabl] 
       \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
dҡG

dҤ@GNWYܦɮסAȦCXmWPZG( [tab] j
[root@linux ~]# 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
# ]ڱNWɮצs printf.txt ɮɦWAhiQΤWרҡA
# NCӳrH [tab] j}CѤWXӬݡAMĤGHO OK A
# OĤ@h]Ydzr׸AҥHNLkFI %s ܥHr (string)
# 觋Ӯi{ӤeCӨCӤehH \t Y [tab] ӹj}ڡI

dҤGGNWzĤGHAOHrBơBpIܡG
[root@linux ~]# 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
# oӮɭԪXiNFIڱNXӤePƮ榡ӿXA
# ̦쪺ӬO %8.2f oӶؤFIڥiHw藍PpƦƨӶi榡XA
# ҦpܦUˤlɡAzۤvլݬݡA|OX򵲪GI
# printf '%10s %5i %5i %5i %8.1f \n' `cat printf.txt | grep -v Name`

dҤTGCXƭ 45 NrH
[root@linux ~]# printf '\x45\n'
E
# oF]ܦnLiHNƭഫrApGz|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 LApGzݭnۦ漶g@dznAݭnN@ǸƦbùWY}}GGXܡA printf i]O@ӫܴΪuI

sed u²
bAѤF@ǥWܪk¦ΤAAөOHӪFiH@ANO sed awk FI oӳåiO۷ΪڡI|ҨӻAg logfile.sh Rnɪp{A jRrΡBέpANOγo_JڧI AAnn@ڡHI ^_^

ڭ̥ӽͤ@ sed nFA򥻤WA sed iHR Standard Input (STDIN) ơA MNƸgLBzAANLX standrad out (STDOUT) @ӤuC ܩBzOHiHiNBRBsWB^Sw浥\OIܤa ڭ̥AѤ@U sed ΪkAAӲLγ~nFI
[root@linux ~]# sed [-nefr] [ʧ@]
Ѽơ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
dҡG

dҤ@GN /etc/passwd eCXAåBڻݭnCL渹APɡAбN 2~5 RI
[root@linux ~]# 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
.....(᭱ٲ).....
# ݨFaH] 2-5 浃LRFAҥHܪƤANS 2-5 o
# t~A`N@UA쥻ӬOnUF sed -e ~AS -e ]աI
# Pɤ]n`NOA sed ᭱ʧ@AаȥH '' ӳ޸AI
# ӡApGunR 2 AiHϥ nl /etc/passwd | sed '2d' ӹFA
# ܩ 3 ̫@AhO nl /etc/passwd | sed '3,$d' աI 

dҤGGӤWDAbĤG(YO[bĤT)[Wydrink tea?zrˡI
[root@linux ~]# 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ĤGeOH
# nl /etc/passwd | sed '2i drink tea' NաI

dҤTGbĤG᭱[JrAҦpyDrink tea or .....zydrink beer?z
[root@linux ~]# 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ҪIOAڭ̥iHsWu@IiHsWnX
# OC@椧nHϱ׽u \ Ӷis檺W[IҥHAWҤlA
# ڭ̥iHo{bĤ@檺̫᭱N \ sbաIO@wnI

dҥ|GڷQN2-5檺eNyNo 2-5 numberzOH
[root@linux ~]# 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
# SF 2-5 AKKKKIڭ̭nƴNX{աI

dҤGȦCX 5-7 
[root@linux ~]# 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
# n[ -n ѼƩOHziHۦUF sed '5,7p' NDFI(5-7|ƿX)
# S[W -n ѼƮɡAXƥiOtܦhI

dҤGڭ̥iHϥ ifconfig ӦCX IP AYȭn eth0  IP ɡH
[root@linux ~]# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:51:FD:52:9A:CA
          inet addr:192.168.1.12  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::250:fcff:fe22:9acb/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
.....(HUٲ).....
# Aڭ̭nuO inet addr:..@ӤwAҥHoAQ grep P sed Ӯ
[root@linux ~]# ifconfig eth0 | grep 'inet ' | sed 's/^.*addr://g' | \
> sed 's/Bcast.*$//g'
# ziHNCӺ޽u (|) L{}ӰAN|o]oI
# hYhAN|oڭ̩һݭn IP YO 192.168.1.12 o

dҤCGN /etc/man.config ɮתeA MAN ]wNXӡAneC
[root@linux ~]# cat /etc/man.config | grep 'MAN'| sed 's/#.*$//g' | \
> sed '/^$/d'
# C@AY # ܸӦ欰ѡAOn`NOAɭԡA
# ѨäOgbĤ@ӦrAYOgbYӫOApUҼˡG
# yshutdown -h now # oӬOOzA # NbOFC
# ]Aڭ̤~|ϥΨN #.*$ oӥWܪkI

dҤKGQ sed b ~/.bashrc ̫@[Jy# This is a testz
[root@linux ~]# sed -i '$a # This is a test'  ~/.bashrc
# WY -i ѼƥiHA sed hק᭱ɮפeIӤOѿùXC
# ܩ󨺭 $a  hN̫@~sWNC
`Ao sed ΰաIӥBܦh shell script |ϥΨoӫO\ sed iHUtκ޲z޲zn`u@InJӪDzߩOI


awk u²
۸ sed ``@Ω@Ӧ檺BzA awk hɦV@ƭӡyzӳBzC ]Aawk ۷AXBzpƾڸƳBzOIawk q`B@ҦOo˪G
[root@linux ~]# awk '1{ʧ@1} 2{ʧ@2} ...' filename
awk iHBz򱵪ɮסA]iHŪӦ۫eӫO standard output C peA awk DnOBzyC@檺줺ơzAӹw]y쪺jŸ "ť" "[tab]" zI|ҨӻAڭ̥ last iHNnJ̪ƨXӡA GpUҥܡG
[root@linux ~]# last
dmtsai   pts/0        192.168.1.12     Mon Aug 22 09:40   still logged in
root     tty1                          Mon Aug 15 11:38 - 11:39  (00:01)
reboot   system boot  2.6.11           Sun Aug 14 18:18         (7+15:41)
dmtsai   pts/0        192.168.1.12     Fri Aug 12 12:07 - 12:08  (00:01)
YڷQnXbPnJ̪ IP ABbP IP H [tab] j}Ah|ܦoˡG
[root@linux ~]# last | awk '{print $1 "\t" $3}'
dmtsai  192.168.1.12
root    Mon
reboot  boot
dmtsai  192.168.1.12
]׭@ڳnBzA]ANݭn "" IکҷQnOĤ@HβĤTA OAĤGβĤT檺eǩǪoO]Ʈ榡DڡIҥHoϥ awk ɭԡAХT{@UzƷApGOsʪơAФnŮ [tab] bA_hAN|oӨҤloˡA|oͻ~PI

t~AѤWoӨҤlz]|DAbC@檺C쳣OܼƦW٪ANO $1, $2... ܼƦW١AHWҤlӻA dmtsai O $1 A]LOĤ@Iܩ 192.168.1.12 OĤTA ҥHLNO $3 աI᭱HI٦ܼƳINO $0 A$0 Ny@CơzN HWҤlӻAĤ@檺 $0 NNOydmtsai pts/0.... z@ڡI ѦiAW|A 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˪BJAz|oA awk OyH欰@BzzA ӡyH쬰̤pBzzCnFA awk 򪾹Dڨ쩳oӸƦXHXOHoNݭn awk ܼƪա

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

ڭ~HWҤlӰApGڷQnCXC@檺bAåBCXثeBzơA åBAӦ榳hAhiHo (`NA awk 򪺩Ҧʧ@H ' AA ҥHAepGQnH print CLɡAOoADܼƪrA]tW@p` printf 쪺榡Aݭnϥ޸өwqXӳI)
[root@linux ~]# last | awk '{print $1 "\t lines: " NR "\t columes: " NF}'
dmtsai   lines: 1        columes: 10
root     lines: 2        columes: 9
reboot   lines: 3        columes: 9
dmtsai   lines: 4        columes: 10
o˥iHA NR P NF tOFaHnFAUӽͤ@ͩҿת "" FaI


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

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

ȱo`NO == ŸA]by޿BzWA NOҿתjBpB󵥵P_WAڭ̲ߺDWOH == ӪܡAӦpGO@ӭȡAҦpܼƳ]wɡANϥ = ӤwC nFAڭ̹ڨӹBΤ@U޿P_aI|ҨӻAb /etc/passwd OH_ ":" ӧ@쪺jA]ڭnd\AĤTp 10 HUƾڡAåBȦCXbPĤTA iHo˰G
[root@linux ~]# 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@linux ~]# 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 ]ڦ@~ƪ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 AiHNWxs@ӦW٬ pay.txt ɮסAhG
[root@linux ~]# 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 ̦nz printf ]yLx@UnաIt~A awk ʧ@ {} ]O䴩 if () I |ҨӻAWOiH׭qoˡG
[root@linux ~]# 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ΡI LAݩiWҵ{FAڭ̳o̴NAh[СCpGz쪺ܡA iH줤|d߳Ghttp://phi.sinica.edu.tw/aspac/reports/94/94011/Ao̤]@ pdf ɪƥG http://vbird.org.cn/linux_basic/0330regularex/awk.pdfC ziHۦѾ\@UӤ峹eAYiHnnd\@U}CPj譱СA ڻ{Ӥ峹gܴγIӤЪФFIܦnڳw ^_^

ƤPCL\
WܪkO۷ΪuAMA sed ٦ awk ]OܴΪu{A LA~Aڭ̨٦ܦhiHϥΪu@ӳBzƳI |ҨӻApڦɮסA@ɮ׬OlɡA@ӫhOgL@ǮɶֿnBz᪺ɮסA ڷQnDoɮפtOAӦpBΥWܪkHIIinzLҿתjӤ@@ˬdO OAڭ̥iHzL Linux Ѫ diff cmp OӶiYiIܴΪڡI


ɮפ
ɭԷ|ΨɮתڡHq`OyP@ӮM˳n骺PA]wɻPlɪtzA ҥHoAܦhɭԩҿתɮפAq`OΦb ASCII ¤rɪWI ɮתOǡH̱`NO diff oI


  • diff
  • diff NOΦbɮפtA@OΦb ASCII ¤rɪWC ڭ̥wBz@U@ɮצnFC]ڭnN /etc/passwd eANĥ|RA ĤhNyno six linezAsɮשm /tmp/test ̭A ӫ򰵡H
    [root@linux ~]# mkdir -p /tmp/test
    [root@linux ~]# cat /etc/passwd | \
    > sed -e '4d' -e '6c no six line' > /tmp/test/passwd
    # `N@UA sed ᭱pGnWLӥHWʧ@ɡACӰʧ@eo[ -e ~I
    
    UӰQפ@U diff ΪkaI
    [root@linux ~]# diff [-bBi] from-file to-file
    Ѽơ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
    
    dҤ@G /tmp/test/passwd P /etc/passwd tG
    [root@linux ~]# diff /etc/passwd /tmp/test/passwd
    4d3    <==o̬OAɮ(/etc/passwd)ĥ|QR (d)
    < adm:x:3:4:adm:/var/adm:/sbin/nologin
    6c5    <==o̬OAɮתĤQNkɮ(/tmp/test/passwd)Ĥ
    < sync:x:5:0:sync:/sbin:/bin/sync
    ---
    > no six line
    # oaI diff Nڭ̭𫍧Bz粒FI
    
    diff ɮׯuO²It~A diff ]iHӥؿUtI |ҨӻAڭ̱Nӥؿ@UG
    [root@linux ~]# diff /etc /tmp/test
    ......(eٲ).....
    Only in /etc: paper.config
    diff /etc/passwd /tmp/test/passwd
    4d3
    < adm:x:3:4:adm:/var/adm:/sbin/nologin
    6c5
    < sync:x:5:0:sync:/sbin:/bin/sync
    ---
    > no six line
    Only in /etc: passwd-
    ......(᭱ٲ).....
    
    ڭ̪ diff oaI٥iH藍PؿUۦPɦWeA o˯uܤK


  • cmp
  • ۹ diff sxγ~A cmp GNΪSohF cmp Dn]ObɮסALDnQΡy줸zhA]A M]iH binary file o(٬OnAA diff DnOHyzA cmp hOHy줸zhAoäۦPI)
    [root@linux ~]# cmp [-s] file1 file2
    ѼơG
    -s  GNҦPI줸BCXӡC] cmp w]ȷ|XĤ@ӵo{PIC
    dҡG
    
    dҤ@G cmp @U /etc/passwd P /tmp/test/passwd 
    [root@linux ~]# cmp /etc/passwd /tmp/test/passwd
    /etc/passwd /tmp/test/passwd differ: byte 106, line 4
    
    ݨFܡHĤ@ӵo{PIbĥ|AӥB줸ƬOb 106 Ӧ줸BI o cmp ]iHΨӤ binary աI ^_^


  • patch
  • patch oӫOP diff iOKiYڡIڭ̫eA diff iHΨӤӪtA|ҨӻAڭ̩ҫإߪ /tmp/test/passwd P /etc/passwd NOӤPɮסCApGnyɯšzOH NOyNªɮפɯŦsɮסzɡAӭn򰵩OH |ҨӻAڭ̥iHo˰աG
    [root@linux ~]# mkdir /tmp/old; cp /etc/passwd /tmp/old
    [root@linux ~]# mkdir /tmp/new; cp /tmp/test/passwd /tmp/new
    [root@linux ~]# cd /tmp ; diff -Naur old/ new/ > test.patch
    
    ɡAb /tmp/test.patch ɮפANOFsªɮפtA FIznAѪOA diff s@oɮ׮ɡAªɮץObeAYO diff oldfile newfile ~I~Asɮתy۹ؿmz̦n]O@ˤnI OKIpNªe (/tmp/old/passwd) ss (/tmp/new/passwd) eOH ²檺AiHγoˡG
    [root@linux ~]# patch -pN < patch_file
    ѼơG
    -p  G᭱iHyXhؿzNC
    dҡG
    
    dҤ@GNs@XӪ patch file Ψӧsª
    [root@linux ~]# cd /tmp/old
    [root@linux ~]# patch -p1 < /tmp/test.patch
    patching file passwd
    # o̷|ϥ -p1 OH]ڭ̦bsªƮɡAOb /tmp UA
    # ӹڪƬOb /tmp/old ̭A]Aڭ̶iJ /tmp/old ɡA
    # Ad\ /tmp/test.patch Ĥ@pUG
    # diff -Naur old/passwd new/passwd ( head -n 1 /tmp/test.patch)
    # o{Aڭ̩ҦbؿO old ̭AҥHANnh@hؿC
    
    ԲӪ patch Ϊkڭ̷|b򪺲ĤjaСA o̶ȬOеzAIڭ̥iHQ diff ӤɮפtA ii@BQγoӥ\ӻs@׸ɮ (patch file) AjaeiPɯũOI ܤaI ^_^

    ɮצCLdzơG pr
    pGzgϥιL@ǹϧΤѳBzn骺ܡAܮeo{A ڭ̦bCLɭԡAiHPɿܻ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@linux ~]# pr /etc/man.config
    
    
    2003-02-10 23:20                 /etc/man.config                  Page 1
    
    
    #
    # Generated automatically from man.conf.in by the
    # configure script.
    .....HUٲ......
    
    WSr騺@OANOϥ pr BzҳyDա D|yɮ׮ɶzByɮɦWzΡyXzTjءC h pr ϥΡAаѦ pr ڡI ^_^

    I^U

    ѦҸ귽

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

    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