J'ai un fichier contenant des lignes de chaînes comme ceci:linux: lignes d'impression dont le premier mot correspond à une variable contenant des caractères spéciaux
uh-g+n uh-g+b
uh-g g
uh-g+r
g+n
uh-g+s g
sh-n+b
sh-n+d
n+d sh-n+d
g-n+d sh-n+d
J'ai une liste de chaînes que je recherche, comme
set pats = (g + n sh-n + b n + d)
Pour chaque chaîne, je souhaite trouver la ligne dont le premier "mot" correspond à la chaîne et ajouter cette ligne à un autre fichier.
Comme vous pouvez le voir ...
Les chaînes de match sont des variables
Les chaînes peuvent ou peuvent ne pas contenir des caractères spéciaux de premier plan comme "-"
Les lignes peuvent contenir la chaîne comme un premier de deux mots, ou isolément
La chaîne peut être une sous-chaîne d'un long string er contenant des caractères principaux spéciaux
La chaîne peut le deuxième mot ou une partie du deuxième mot (qui ne devrait pas être un match)
Il a été un défi inattendu de trouver la bonne combinaison de choses à faire avec grep pour faire ce travail! .
Voici un exemple de quelque chose de simple pour essayer cela ne fonctionne pas (en supposant des lignes énumérées ci-dessus sont dans le fichier in.txt
#!/bin/tcsh
set pats = (g+n sh-n+b n+d)
foreach pat ($pats)
grep -w $pat in.txt >> out.txt
end
Dans ce cas, out.txt ressemble à ceci:
uh-g+n uh-g+b
g+n
sh-n+b
sh-n+d
n+d sh-n+d
g-n+d sh-n+d
uh-g+n uh-g+b
g+n
sh-n+b
sh-n+d
n+d sh-n+d
g-n+d sh-n+d
Mais ce que je veux est ceci:
g+n
sh-n+b
n+d sh-n+d
Salut, bienvenue à Stack Overflow! Quand une question demande du code, nous nous attendons à ce qu'elle inclue des solutions essayées, pourquoi elles n'ont pas fonctionné et quels résultats vous vouliez plutôt. (Voir [http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist](http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist].) Plus spécifiquement à votre question, je demanderais aussi une balise plus spécifique que "shell", puisque votre notation pour la définition d'une liste de chaînes ne correspond pas à celle des shell Linux courants. – ruakh
Il semble que vous ayez plus d'un motif que vous souhaitez utiliser. Qu'est-ce que vous essayez exactement de faire correspondre. Voulez-vous faire correspondre chaque motif séparément?Un exemple du résultat souhaité aidera à faire passer votre message. Veuillez également décrire les approches que vous avez déjà essayées (par exemple, les commutateurs grep et les guillemets). –