J'ai essayé le code suivant pour remplacer QQ
con ZZ
mais il ne fait pas ce que je veux :
var1=QQ
sed -i 's/$var1/ZZ/g' $file
Cependant, ce code fait ce que je veux :
sed -i 's/QQ/ZZ/g' $file
Comment utiliser les variables dans sed
?
J'ai essayé le code suivant pour remplacer QQ
con ZZ
mais il ne fait pas ce que je veux :
var1=QQ
sed -i 's/$var1/ZZ/g' $file
Cependant, ce code fait ce que je veux :
sed -i 's/QQ/ZZ/g' $file
Comment utiliser les variables dans sed
?
Le Shell est responsable de l'expansion des variables. Lorsque vous utilisez des guillemets simples pour les chaînes de caractères, leur contenu sera traité littéralement, ainsi sed
essaie maintenant de remplacer chaque occurrence du littéral $var1
par ZZ
.
Utilisez des guillemets doubles pour que le Shell développe les variables tout en préservant les espaces blancs :
sed -i "s/$var1/ZZ/g" "$file"
Lorsque vous avez besoin du caractère quote dans la chaîne de remplacement, vous devez le faire précéder d'une barre oblique inverse qui sera interprétée par le Shell. Dans l'exemple suivant, la chaîne quote me
sera remplacé par "quote me"
(le caractère &
est interprété par sed
) :
sed -i "s/quote me/\"&\"/" "$file"
Si vous avez beaucoup de métacaractères Shell, pensez à utiliser des guillemets simples pour le motif, et des guillemets doubles pour la variable :
sed -i 's,'"$pattern"',Say hurrah to &: \0/,' "$file"
Remarquez comment j'utilise s,pattern,replacement,
au lieu de s/pattern/replacement/
je l'ai fait pour éviter toute interférence avec le /
sur \0/
.
Le Shell exécute alors la commande ci-dessus sed
avec les arguments suivants (en supposant que pattern=bert
et file=text.txt
) :
-i
s,bert,Say hurrah to &: \0/,
text.txt
Si file.txt
contient bert
le résultat sera :
Say hurrah to bert: \0/
Votre exemple de citation unique est particulièrement utile, il couvre bien l'utilisation du modèle regex par sed !
Si vous avez une barre oblique /
dans la variable => Cela m'a sauvé ! Ma variable est une url et elle contient /
. Passage à l'utilisation |
comme le sépar sépar sépar sépar sépar sépar sépar sépar résol résol résol résol résol résol résol mon problème
Pour développer (jeu de mots) La réponse de @mani ,
perl
|
peut également apparaître dans la valeur de votre variable, alors n'hésitez pas à utiliser d'autres délimiteurs.SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.
0 votes
Voir ma réponse dans ce post de votre part
0 votes
Liés : stackoverflow.com/questions/407523/