UNIX: Comment puis-je grep dans un script en utilisant une variable comme paramètre de recherche pour un fichier?

Avant de commencer, ce n’est pas exactement ce que cela semble être et j’ai effectué une recherche sur le Web pendant un moment avant de venir ici. Fondamentalement, j’ai un script où l’utilisateur passe une chaîne et la stocke dans une variable. Je dois alors prendre ce mot et rechercher tous les sous-mots qui pourraient en être extraits dans un fichier de dictionnaire. Le problème que j’ai est que je dois m’assurer que les mots ont au moins 4 caractères. Je n’ai pas la meilleure compréhension des expressions régulières. Je suis conscient des techniques que vous pouvez utiliser simplement de manière logique ne peut pas les assembler parfois. Je vais vous montrer la ligne de code et expliquer mon raisonnement derrière pourquoi je pense que cela devrait être ainsi. Alors, quelqu’un pourrait-il me corriger sur ma logique? Je ne cherche pas quelqu’un pour m’envoyer la ligne de code de travail mais peut-être corriger ma logique pour que je puisse mieux comprendre et obtenir la réponse par moi-même.

words=$(grep -iE '(["$text"]{4,})' /usr/dict/words) echo "$words" 

Par exemple si je passe en ssortingng college je devrais sortir comme cell cello clee cleg etc …..

Je stocke la commande dans une autre variable à écho. Je ne sais pas exactement pourquoi, il semble que ce que j’ai vu en ligne, la plupart des gens étaient plutôt friands de cela. Utilisation de grep avec -i pour ignore case et -E pour expression régulière ou (egrep) Je pense que l’expression doit être placée entre parenthèses pour les expressions. $ text est la variable dans laquelle les utilisateurs ont saisi les entrées. Je sais que $ signifie généralement la terminaison in et [] est une plage et “” la fait lire la variable plutôt que d’imprimer ce qui existe. Alors {4,} signifie quatre caractères ou plus. alors la dernière partie est le chemin du fichier. Toute consortingbution serait appréciée et, encore une fois, je n’aime pas que les réponses nourries à la cuillère soient un moyen facile de ne rien apprendre. Je voudrais juste des corrections sur ma logique si possible. Merci tout le monde!!

Si par sous-mots, vous voulez dire les permutations de ses lettres, alors votre commande est correcte sauf pour les citations. Malheureusement, vous devez le faire comme ceci:

 words=$(grep -iE '(['"$text"']{4,})' /usr/dict/words) 

De cette façon, vous passez à grep la chaîne entre guillemets afin que le shell n’interprète pas ses symboles spéciaux. Mais dans le même temps, vous devez développer votre $text var, vous devez donc créer une lacune dans votre chaîne entre guillemets simples et, dans cet intervalle, placez votre variable entre guillemets.

J’espère que je ne l’ai pas gâché pour vous.