Je veux rechercher une chaîne (que je ne sais pas à moins que je ne regarde à l'intérieur des fichiers) sur la ligne de commande Linux. p>
Exemple: P>
Je veux echo ce mot (qui existe dans les deux fichiers) dans un fichier ou stockez-le dans une variable. P>
Comment est-ce possible? P>
4 Réponses :
Vous pouvez écrire le script pour gérer cela. Vous avez besoin d'un mot sur le fichier 1, dans la commande Grep Utilisez Grep (Grep -NWR "" -E "$ Word") pour trouver un mot dans le fichier 2. Si correspondez, écho un mot. P>
S'il n'y a pas de doublons blanchissez un seul fichier que vous pouvez utiliser fileau chat1 File2 | Trier | UNIQ -D
code> p>
Chaque ligne peut (très probablement) contenir plus d'un mot.
$ cat input_one.txt FIREFOX a FIREFOX b Firefox a firefox b $ cat input_two.txt CHROME a FIREFOX a EXPLORER a $ while read line; do grep "$line" input_two.txt ; done < input_one.txt FIREFOX a Explanation:while will loop every line with input_two.txt file as input and will store the temporary line in the line variable.In every line will search for it in the input_one.txt file and -o option will make to print only the matched part.EDIT: See comments
Il est vraiment inefficace d'appeler grep code> pour chaque ligne du fichier d'entrée. Et chaque ligne peut (très probablement) contenir plus d'un mot. Notez également que $ line code> est sujet à la scission de mots et qu'il sera interprété comme une regex par grep code>, pas comme une chaîne fixe.
@Pesathe à partir de plus que sur un mot que j'ai édité pour le soutenir.
Non, tu n'as pas vraiment. Mais il n'est pas clair de la question donc je ne me soucierais pas de cela spécifiquement.
convenu qu'il n'est pas clair de la question, mais pourquoi je ne suis pas?
La façon dont j'ai compris "mots" dans la question, prenons en compte deux fichiers un code>: firefox chrome code> et deux code>: explorateur \ nfirefox < / code>. Je m'attendrais à obtenir firefox code>. Réponse de Borrible , par exemple des résultats comme prévu.
Vous pouvez obtenir une liste de tous les mots uniques d'un fichier utilisant: où -e '\ w +' code> correspond à des mots et -O code> sortira les pièces correspondantes. Nous pouvons ensuite utiliser la commande rejoindre code> qui identifie les lignes de correspondance dans deux fichiers, ainsi que la substitution de processus pour réussir les résultats de notre Word Finder: P> join <(grep -o -E '\w+' filename1 | sort -u) <(grep -o -E '\w+' filename2 | sort -u)
Que voulez-vous dire, vous voulez trouver tous les mots qui sont dans les deux fichiers?
Il devrait y avoir une comparaison entre ces fichiers et si le mot (dans mon exemple, "Apple" se trouve dans les deux fichiers) Je veux aller plus loin avec elle. Faites-en écho sur Commandline ou rangez-le dans une variable.
Un peu plus de spécifications serait utile. Les fichiers sont-ils un mot de cas fixe, pas de diacritique, pas de blanchiment et de ponctuation par ligne, ou ne voulez-vous faire quelque chose de complexité comme des textes «humains» avec des cas différents, des ponctuations ou des diacritiques etc.