J'essaye d'extraire une chaîne d'une chaîne avec sed sur cygwin.
#!/bin/bash
var1="foo\ bar"
var2="baz"
var3="$var1 $var2"
# extract "foo\ bar" from "foo\ bar baz"
var4=`echo $var3 | sed "s/"$var1"//"`
echo "$var4"
mais j'obtiens la sortie suivante, provoquée par la barre oblique inverse: sed: -e expression # 1, char 6: commande `s 'non terminée
comment puis-je écrire la commande sed pour sortir 'baz'?
perl -pe "s/\Q$var1//"
quotemeta
? Je ne changerai pas la réponse car c'est plus clair tel quel, mais c'est bon à savoir, merci.Pour le dire simplement ... sed ne fonctionne pas ... comme sur les colonnes, c'est une approche plus orientée ligne. Ne forcez pas une commande - utilisez-la où cela convient. Couper serait une option meilleure / plus simple
sinon, si l'extraction de sous-chaîne est ce que vous recherchez, awk convient également pour cela ... exemple
son plus simple à utiliser dans ce cas, cela suffit-il?
la source
Pour que cela fonctionne avec sed, nous devons échapper aux barres obliques inverses. Préparez-vous à la folie:
Bien sûr, il y a beaucoup d'autres personnages qui nécessitent une évasion, tels que
*
La réponse en perl de @ terdon est donc meilleure que cette forêt de cure-dents.la source