J'ai besoin de Si je connais la chaîne, je peux échapper aux caractères spéciaux une à la fois, mais comment puis-je faire cela pour toute la chaîne? P>
Exécution de la chaîne via un script SED pour préfixer chaque caractère spécial avec \ pourrait être une idée, j'ai toujours besoin de RTFM comment un tel script devrait être écrit. Je ne sais pas s'il y a d'autres, meilleures, options. P>
J'ai lu Edit: Pour éviter les faux positifs, je devrais également ajouter une détection de nouvelle ligne au motif, par exemple. Egrep code> une chaîne qui n'est pas connue avant l'exécution et que je vais avoir via une variable de shell (Shell est bash, si cela importe). Le problème est que cette chaîne contiendra des caractères spéciaux tels que des accolades, des espaces, des points, des barres obliques, etc. P>
re_format (7) code> mais il semble qu'il n'y ait rien de tel comme "Prendre toute la chaîne suivante comme littéral" ... p>
Egrep '^ MyunknownString' Code> P>
3 Réponses :
Utilisez le drapeau -f code> pour faire le motif une chaîne littérale fixe
Merci pour la pointe, c'est correct, mais j'ai oublié de préciser que j'ai également besoin de faire correspondre la chaîne seulement i> au début de la ligne. J'ai ajouté ce détail à la question.
Si vous devez intégrer la chaîne dans une expression plus grande, sed code> est comment je le ferais.
s_esc="$(echo "$s" | sed 's/[^-A-Za-z0-9_]/\\&/g')" # backslash special characters
inv_ent="$(egrep "^item [0-9]+ desc $s_esc loc .+$" inventory_list)"
Essayez s / [^ [: alnum:] _-] / \\ & / g ' code> plutôt parce que votre version ne fonctionne pas sur tous les locaux
s_esc = $ (echo "$ s" | s / [] s / [] \\. $ * {} | +? () [^ -] / \\ & / g ') code> devrait aussi fonctionner .
essayez-vous de protéger la chaîne d'être interprété de manière incorrecte en tant que syntaxe BASH ou essayez-vous de protéger des parties de la chaîne d'être interprétée comme syntaxe d'expression régulière?
pour la protection Bash: P>
GREP Prend en charge le commutateur Aucun évacuation n'est nécessaire dans le fichier. Il suffit de faire un fichier contenant une seule ligne (et donc un motif) qui peut être produit à partir de votre coque variable si c'est ce que vous devez faire. P> juste pour illustrer le Point. p> Essayez-le avec -f code>: p>
-f code> à la place comme une autre affiche suggérée pour la protection antirégène. P> P>
Comment échapper aux expressions régulières dans Bash Stackoverflow.com/Questtions/11856054/...