Hej venner,
Kun for ganske nylig i gang med at lære
sed kommando ... en jeg fandt, at
sed er hurtigere at finde de mønstre, end nogle af mine scripts, der bruger grep at tjekke Patten inde i en fil ved hjælp af linje for linje søgemetode, som er tidskrævende.
Nedenstående script "strMatch" er en af dem, som jeg bruger til at søge efter et mønster. Når mønsteret er fundet det vil vise mønster & linjenummeret eller linjenummeret alene som vist nedenfor.
> Input
strMatch Sample.cpp "mønster STRING"
> Output
5: PATTERN STRING
> Input
strMatch Sample.cpp "mønster STRING" 2
> Output
5
Mange af mine andre script er begyndt at bruge dette script, og den afhængighed at dette script er næsten blev sammensat således, at den nye scripts, der anvender strMatch direkte eller indirekte til forskellige formål er langsom i udførelsen. Jeg har bemærket, at følgende
sed kommando kan bruges til at justere strMatch til at øge søgningen hastighed ...
sed '/ Mønster STRING / p' Sample.cpp
Men jeg har brug for at få det linjenummer også gerne mine tidligere strMatch .... Er der nogen måde at udskrive output som nedenfor
Output 1 [Linjenummer & mønster]
5 PATTERN STRING
Output 2 [Linjenummer hvor mønster blev fundet]
5
Fordi nogle af mine scripts bruger kun disse linjenummer ..... Kindly hjælpe med at gøre strMatch script hurtigt .... formålet med strMatch er at søge efter et mønster og returnere det mønster, sted eller det mønster, sammen med placeringen ..... Nedenfor er faktisk strMatch script ...
Der er et særligt tilfælde håndtering af "omfatte" nøgleordet ..... Jeg er ikke i stand til at finde nogen alternativ til "exec" kommando til at videregive de filindhold til en variabel som sådan (med korrekt tilpasning )..... og en eller anden måde, når jeg søger efter medtage søgeord ... det vil exec på alle filerne i mappen ....... jeg mener med
sed kommando jeg plejer være der kræver "exec",
Thanks in advance ...........


-------------------------------------------------- -----------------------
filter () (
mønster \u003d $ 1
line \u003d $ 2
for x i $ line; do
flag \u003d `echo $ x | grep-c $ mønster«
if [$ flag-eq 1]; derefter
return $ flag
anden
tilbagevenden 0
fi
gjort
)
# 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 læse linje gøre
if [ "$ 2" \u003d\u003d "omfatte"]; derefter
quitCon \u003d `echo $ line | grep-c "//-------------------------"`
if [$ quitCon-eq 1]; derefter
tælle \u003d$(($ count + 1))
if [$ count-eq 2]; derefter
brække
fi
fi
fi
status \u003d `echo $ line | grep-c" $ 2 "`
if [$ status-eq 1]; derefter
fflag \u003d `filter $ mønster $ line«
wcnt \u003d `echo $ fflag | wc-l`
if [$ wcnt \u003d\u003d 1]; derefter
if [$ exitCnt-ge $ cnt]; derefter
if [ "$ mode"! \u003d "2"]; derefter
tilfælde $ mode i
"NUM") # LINE NUMBER
echo $ linCnt
;;
"FON") # første forekomst LINE NUMBER
echo $ linCnt
exit
;;
"FOLN") # første forekomst LINE
echo $ linje
exit
;;
"Ln") # kun linjer
echo $ linje
;;
*) # DEFAULT
echo $ linCnt: $ line
;;
ESAC
# echo "Hej"
anden
echo $ linCnt
fi
# filterKeywords $ line
fi
fi
fi
linCnt \u003d$(($ linCnt + 1))
cnt \u003d$(($ cnt + 1))
# echo "---------------------------------------$ cnt $ exitCnt "
gjort
# echo "Farvel!"