Ciao amici,
Solo molto recentemente ho iniziato a imparare
sed ... uno dei comandi che ho trovato
sed è più veloce a trovare i modelli di alcuni dei miei script che utilizza grep per verificare la Patten all'interno di un file riga per riga, utilizzando il metodo di ricerca che è in termini di tempo.
Il seguente script di "strMatch" è uno di loro che i uso per la ricerca di un modello. Una volta che il modello che si trova per visualizzare il modello e il numero di riga o il numero di riga sola, come illustrato di seguito.
> Ingresso
strMatch Sample.cpp "PATTERN STRING"
> Uscita
5: MODELLO STRING
> Ingresso
strMatch Sample.cpp "PATTERN STRING" 2
> Uscita
5
Molti dei miei altri script ha cominciato a usare questo script e la dipendenza di questo script è quasi diventato complesso in modo che il nuovo script che utilizza strMatch, direttamente o indirettamente, per vari scopi è lento in esecuzione. Ho notato che le seguenti
sed comando può essere utilizzato per ottimizzare strMatch per aumentare la velocità di ricerca ...
sed '/ MODELLO STRING / p' Sample.cpp
Ma ho bisogno di ottenere il numero della linea, come anche i miei precedenti strMatch .... C'è un modo per stampare l'uscita, come di seguito
Risultato 1 [linea numero & modello]
5 STRING CORRENTI
Risultato 2 [Linea numero del modello in cui è stato trovato]
5
Perché alcuni dei miei script utilizza solo i numeri di linea ..... Si prega di aiutare a rendere strMatch script veloce .... lo scopo di strMatch è alla ricerca di un modello e riprendere lo schema località o il modello con la posizione attuale ..... Ecco strMatch script ...
vi è un caso speciale per la gestione di "comprendere" parola chiave ..... io non sono in grado di trovare alternative per "exec" comando per passare il contenuto del file di una variabile in quanto tale (con un corretto allineamento e )..... in qualche modo ogni volta che la ricerca di parole chiave per comprendere ... si exec su tutti i file presenti nella cartella, credo, con .......
sed I comandi non saranno richiedono "exec",
Grazie in anticipo ...........


-------------------------------------------------- -----------------------
filtro () (
modello \u003d $ 1
linea \u003d $ 2
per x in $ line; fare
bandiera \u003d `echo $ x | grep-c $ modello»
if [$ flag-eq 1]; poi
return $ bandiera
altro
return 0
fi
fatto
)
# filterKeywords () (
#)
pattern \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
mentre read line; fare
if [ "$ 2" \u003d\u003d "comprendere"], quindi
quitCon \u003d `echo $ line | grep-c "//-------------------------"`
if [$ quitCon-eq 1]; poi
count \u003d$(($ count + 1))
if [$ count-eq 2]; poi
pausa
fi
fi
fi
status \u003d `echo $ line | grep-c" $ 2 "»
if [$ status-eq 1]; poi
fflag \u003d `$ pattern filtro $ line»
wcnt \u003d `echo $ fflag | wc-l`
if [$ wcnt \u003d\u003d 1], quindi
if [$ exitCnt-ge $ cnt], quindi
if [ "$ mode"! \u003d "2"], quindi
modalità in caso $
"NUM") # numero della linea
echo $ linCnt
;;
"FON") # prima occorrenza numero di riga
echo $ linCnt
uscita
;;
"FOLN") # prima occorrenza LINE
echo $ riga
uscita
;;
"LN") # SOLO LINEE
echo $ riga
;;
*) # DEFAULT
echo $ linCnt: $ line
;;
esac
# echo "Hi"
altro
echo $ linCnt
fi
# $ filterKeywords linea
fi
fi
fi
linCnt \u003d$(($ linCnt + 1))
cnt \u003d$(($ cnt + 1))
# echo $ "---------------------------------------$ cnt exitCnt "
fatto
# echo "Arrivederci!"