j'ai une entrée utilisateur qui serait utilisé dans une chaîne de recherche qui peut contenir un métacaractèreManipulation métacaractères dans les chaînes de recherche
Pour exemple C# ou C++
ma commande grep en fonction était:
grep -E "$1|$2" test.txt
en remplacement direct:
grep -E "C\+\+|testWord" test.txt
grep -E "C\#|testWord" test.txt
le premier pris les lignes fines, mais pas la seconde. Etrangement, # a été complètement ignoré. Sans remplacement direct, à la fois attraper quoi que ce soit avec c suivi par Testword au lieu de C++ et C# respectivement
J'ai essayé manipuler avec sed
$temp = `echo $1 | sed 's/[\#\!\&\;\`\"\'\|\*\?\~\<\>\^\(\)\[\]\{\}\$\+\\]/\\&/g'`
mais il ne fonctionne pas bien. Ou existe-t-il un autre moyen de gérer les entrées utilisateur avec des métacaractères?
Merci à l'avance
Comment obtenez-vous l'entrée de l'utilisateur? Comme arguments de ligne de commande ou via la commande 'read'? –
Intéressant. En utilisant vos nouveaux exemples, C++ est celui qui me donne le problème où il semble que C# est problématique pour vous. J'ai trouvé que l'utilisation des guillemets ** et des backslashes ** aidait: 'grep -E" C \ + \ + "' comme le fait d'utiliser grep avec un tube échappé sans échapper les plus: 'grep 'C++ \ | C#" ' –
En ce qui concerne votre exemple de sed, vous ne voulez normalement pas un signe dollar sur un nom de variable sur le côté gauche d'une affectation (sauf si vous faites de l'indirection). –