Hei venner,
Kun kort tid siden begynte jeg å lære
sed kommando ... et jeg fant at
sed er raskere å finne mønstrene enn noen av mine skript som bruker grep for å sjekke Patten inne i en fil med linje for linje søkemetode som er tidkrevende.
Nedenfor script "strMatch" er en av dem som jeg bruker til å søke etter et mønster. Når mønsteret finnes det vises mønsteret og linjenummer eller linjenummer alene som vist nedenfor.
> Input
strMatch Sample.cpp "MØNSTER STRING"
> Output
5: MØNSTER STRING
> Input
strMatch Sample.cpp "MØNSTER STRING" 2
> Output
5
Mange av mine andre skriptet har begynt å bruke dette skriptet og avhengigheten til dette skriptet har nesten ble sammensatt slik at den nye skript som bruker strMatch direkte eller indirekte til ulike formål er treg i kjøring. Jeg har lagt merke til at følgende
sed Kommandoen kan brukes til å finpusse strMatch å øke søke fart ...
sed '/ MØNSTER STRING / p' Sample.cpp
Men jeg trenger for å få linjenummer også gjerne min tidligere strMatch .... Er det noen måte å skrive ut resultatet like nedenfor
Output 1 [Linjenummer & mønster]
5 MØNSTER STRING
Output 2 [Linjenummer hvor mønsteret ble funnet]
5
Fordi noen av mine skript bruker bare disse linjenumre ..... Vennlige hjelpe oss med å gjøre strMatch script fort .... formålet strMatch er å søke etter et mønster og returnere mønsteret plassering eller mønsteret sammen med plasseringen ..... Nedenfor er faktisk strMatch script ...
det er et spesielt tilfelle for håndtering av "include" søkeord ..... jeg ikke kunne finne noe alternativ for "exec-kommandoen til å sende filen innhold til en variabel som sådan (med riktig justering )..... og liksom når jeg søker etter inkludere søkeordet ... det vil exec på alle filene i mappen ....... jeg mener med
sed kommando jeg wont være kreve "exec",
Takk på forhånd ...........


-------------------------------------------------- -----------------------
filter () (
mønster \u003d $ 1
linje \u003d $ 2
for x in $ linje; do
flag \u003d `echo $ x | grep-c $ mønster`
if [$ flag-eq 1]; deretter
return $ flag
ellers
return 0
fi
ferdig
)
# filterKeywords () (
#)
mønster \u003d $ 2
exec <$ 1
# fileCont \u003d `rdfil $ 1`
linCnt \u003d 1
exitCnt \u003d `lincnt $ 1`
cnt \u003d 0
count \u003d 0
mode \u003d $ 3
# rdfil $ 1
mens du leser linje; gjøre
if [ "$ 2" \u003d\u003d "inkluderer"]; da
quitCon \u003d `echo $ line | grep-c "//-------------------------"`
if [$ quitCon-eq 1]; deretter
telle \u003d$(($ count + 1))
if [$ count-eq 2], så
pause
fi
fi
fi
status \u003d `echo $ line | grep-c" $ 2 "`
if [$ status-eq 1]; deretter
fflag \u003d `filter $ mønster $ linje`
wcnt \u003d `echo $ fflag | wc-l`
hvis [wcnt $ \u003d\u003d 1]; deretter
if [$ exitCnt-ge $ cnt]; deretter
if [ "$ mode"! \u003d "2"]; da
case $ modus i
"NUM") # linjenummer
echo $ linCnt
;;
"FON") # første forekomsten linjenummer
echo $ linCnt
exit
;;
"FOLN") # første forekomsten LINE
echo $ line
exit
;;
"LN") # ONLY LINES
echo $ line
;;
*) # DEFAULT
echo $ linCnt: $ linje
;;
esac
# echo "Hei"
ellers
echo $ linCnt
fi
# filterKeywords $ linje
fi
fi
fi
linCnt \u003d$(($ linCnt + 1))
cnt \u003d$(($ cnt + 1))
# echo "---------------------------------------$ cnt $ exitCnt "
ferdig
# echo "Bye!"