Bonjour les amis,
Ce n'est que tout récemment j'ai commencé à apprendre
sed ... une commande que j'ai trouvé
sed est plus rapide à trouver les modèles que certains de mes scripts qui utilise grep pour vérifier la Patten l'intérieur d'un fichier ligne par ligne en utilisant la méthode de recherche qui prend du temps.
Le script ci-dessous "strMatch" est l'un d'eux que j'ai utilisé pour la recherche d'un modèle. Une fois le modèle est trouvé, il affiche le modèle et le numéro de la ligne ou le numéro de la ligne seul, comme indiqué ci-dessous.
> Input
strMatch Sample.cpp "PATTERN STRING"
> Output
5: STRING PATTERN
> Input
strMatch Sample.cpp "STRING PATTERN" 2
> Output
5
Beaucoup de mes autres script a commencé à utiliser ce script et de la dépendance de ce script est presque devenu complexe, de telle sorte que les nouveaux scripts qui utilise strMatch directement ou indirectement à des fins diverses est lent dans l'exécution. J'ai remarqué que les
sed commande peut être utilisée pour modifier strMatch pour augmenter la vitesse de recherche ...
sed '/ PATTERN STRING / p' Sample.cpp
Mais j'ai besoin d'obtenir le numéro de la ligne aussi comme mon précédent strMatch .... Est-il possible d'imprimer les résultats comme ci-dessous
Produit 1 [Numéro de ligne et mode]
5 STRING PATTERN
Produit 2 [Ligne numéro motif a été trouvé]
5
Parce que certains de mes scripts utilise ces numéros de ligne ..... Veuillez aider à faire de script strMatch rapide .... le but de strMatch est à la recherche d'un motif et le motif de retour ou de l'emplacement le long de la configuration de l'emplacement ci-dessous est en fait ..... strMatch script ...
il est un cas particulier pour le traitement des "include" mot-clé ..... je ne suis pas en mesure de trouver une alternative pour les "exec" pour passer le contenu du fichier à une variable en tant que telle (avec alignement et )..... en quelque sorte à chaque fois que je recherche pour des mots clés ... il exec sur tous les fichiers dans le dossier ....... je pense, avec
sed commande i wont be exigeant "exec",
Merci d'avance ...........


-------------------------------------------------- -----------------------
filtre () (
$ pattern \u003d 1
ligne \u003d $ 2
for x in $ line; faire
flag \u003d `echo $ x | grep-c $ pattern»
if [$ flag-eq 1], puis
return $ drapeau
autre
return 0
fi
fait
)
# 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
# 1 $ rdfil
tout lire en ligne, ne
if [ "$ 2" \u003d\u003d "include"], puis
quitCon \u003d `echo $ line | grep-c "//-------------------------"`
if [$ quitCon-eq 1], puis
count \u003d$(($ count + 1))
if [$ count-eq 2], puis
pause
fi
fi
fi
status \u003d `echo $ line | grep-c" $ 2 "»
if [$ status-eq 1], puis
fflag filtre \u003d `$ pattern $ line»
wcnt \u003d `echo $ fflag | wc-l`
if [$ wcnt \u003d\u003d 1], puis
if [$ exitCnt-ge $ cnt], puis
if [ "$ mode"! \u003d "2"], puis
case $ mode
"NUM") # LINE NUMBER
echo $ linCnt
;;
"FON") # FIRST OCCURRENCE LINE NUMBER
echo $ linCnt
sortie
;;
"FOLN") # FIRST OCCURRENCE LIGNE
echo $ line
sortie
;;
"LN") # uniquement les lignes
echo $ line
;;
*) # DEFAULT
echo $ linCnt: $ line
;;
esac
# echo "Salut"
autre
echo $ linCnt
fi
# filterKeywords $ line
fi
fi
fi
linCnt \u003d$(($ linCnt + 1))
cnt \u003d$(($ cnt + 1))
# echo $ "---------------------------------------$ cnt exitCnt "
fait
# echo "Bye!"