2010-11-09 28 views
0

cette chaîne de recherche a été fournie par Paul.R (très apprécié Paul):recherche de chaîne de script Shell où '#' est pas en position 1er caractère

** trouver dir -type f -print0 | xargs -0 grep -F -f strings.txt **

Remarque, j'utilise l'argument de recherche ci-dessus pour effectuer une recherche récursive dans le répertoire pour les noms de chemin codés en dur dans les scripts shell. Cependant, en raison des limitations de l'environnement Unix (TRU64), je ne peux pas utiliser le commutateur GREP -r pour effectuer ma recherche dans le répertoire. D'où l'utilisation de la solution fournie ci-dessus. Comme critère supplémentaire, je voudrais étendre cet argument de recherche pour exclure tout texte où le premier caractère principal de la chaîne recherchée est "#" (symbole de commentaire).

Nous souhaiterions recevoir vos commentaires.

Merci ... Evan

Répondre

0

Je suppose que vous êtes juste essayer de limiter les résultats à la sortie de la commande que vous avez affichée. Si c'est le cas, alors qu'en est-il

trouver dir -type f -print0 | xargs -0 grep -F -f chaînes.txt | grep -v «^# »

La commande finale canalisée ignorera toutes les lignes qui correspondent à l'expression rationnelle^# (# commence par char)

+0

Patrick, merci pour vos commentaires. Malheureusement, cela ne suffit pas. La commande d'origine que j'ai publiée génère le nom du chemin d'accès et le fichier auquel appartient la chaîne à partir de la position du premier caractère. J'en ai besoin pour identifier les scripts qui satisfont mes critères de recherche. Si je grep le jeu de résultats le symbole de commentaire peut exister dans n'importe quelle position de caractère. Je réalise que je peux dans ce cas omettre le symbole '^', cependant, comment distinguer l'utilisation de '#' comme faisant partie d'un commentaire, plutôt que d'un caractère sur n'importe quelle partie de cette ligne? –

+0

Ce que j'essaie d'obtenir, c'est d'abord filtrer toutes les lignes qui ont un commentaire commençant en position 1 de tous les scripts, puis d'introduire ce jeu de résultats dans la recherche de noms de chemins dans ces scripts. –

+0

1. Afin de filtrer les données où le hachage agit pour signaler un commentaire mais pas où le hachage agit en tant que caractère, vous devez comprendre ce qui, dans le code, signale que le hachage agit comme un littéral de caractère. 2. est cette commande pour un projet unique (où nous pourrions faire plusieurs passes) ou est-ce pour une autre utilisation? J'ai dû modifier un peu votre article original, mais cela aide-t-il (vous pouvez réinsérer votre deuxième grep pour obtenir la fonctionnalité que j'ai retirée - trouver. -type f -print0 | xargs -0 cat | grep -v '^ [ \ t] * # '| grep -v^$ - qui devrait vous aider à démarrer –

0

Cette solution ne fonctionnera pas si le chemin et le fichier des fichiers est contenu dans strings.txt, mais cela pourrait fonctionner dans votre situation.

find dir -type f -print0 | xargs -0 grep -v '^#' | grep -F -f strings.txt