Sed de recherche et de remplacement de syntaxe dans Cygwin?
Je suis en train de serch et de les remplacer à l'aide de sed dans Cygwin:
SRC_FOLDER_MAIN=bra
TGT_FOLDER_MAIN=tag
mais la commande suivante de sed ne fonctionne pas:
sed 's/${SRC_FOLDER_MAIN}/${TGT_FOLDER_MAIN}/g' externals.txt > externals_mod.txt
Cet exemple fonctionne bien (remplace "soutien-gorge" avec "tag"):
sed 's/bra/tag/g' externals.txt > externals_mod.txt
Ce qui me manque?
Pourrait-il que Cygwin est le problème?
- +1 pour ton exemple, il peut-être une faute de frappe, cependant de bon sens! même que
<tag>
,bra
doit être couplé trop ^_^. - Jumelé? Je ne comprenais pas...?
- c'est un concept extrêmement difficile, nécessitant des années d'études intenses 😛 😛 😛
- ah ok, je vois... se mettent au travail.
- ...... juste l'oublier si vous ne l'avez pas...
- il est natif de fra haut-parleur droit de chose... certainement jumelés, si possible 🙂
Vous devez vous connecter pour publier un commentaire.
si vous avez besoin de passer des variables shell dans sed, vous avez besoin de la sortir de l'apostrophe
essayez comme ceci
sed 's/'${SRC_FOLDER_MAIN}'/'${TGT_FOLDER_MAIN}'/g' $externals.txt > $externals_mod.txt
avis de la
'
juste avant et après${SRC_FOLDER_MAIN}
et similaire dans${TGT_FOLDER_MAIN}
Mise À Jour: Exemple
De faire
sed
remplacer basé sur les variables de la valeur, de l'emballer avec des guillemets et de l'utilisation variable simple appel, sans{}
. Aussi, est$externals*.txt
correct? Si vous appelez des fichiers, il suffit de mettre leur nom.Au lieu de
sed "s/$SRC_FOLDER_MAIN/$TGT_FOLDER_MAIN/g" $externals.txt > $externals_mod.txt
mise à jour. C'est, sans{}
pour les variables.-e
ni-s
.$externals.txt
. Si ce n'est pas une variable mais un nom de fichier, il suffit de mettreexternals.txt
comme indiqué sur ma mise à jour de réponse.sed "s/${SRC_FOLDER_MAIN}/${TGT_FOLDER_MAIN}/g" externals.txt > externals_mod.txt
devrait fonctionner. Au moins il le fait pour moi.man sed
pour voir si vous pouvez trouver quelques conseils. J'ai atteint ma limite : )Êtes-vous en utilisant le standard de Windows cmd shell?
Si oui, alors vous avez besoin d'envelopper les variables d'environnement dans le signe%, comme suit:
Si vous avez du mal avec les personnages sed accepte c'est la substitution, il suffit d'utiliser awk:
Qui fonctionne avec tous les personnages dans les variables. La seule chose à prendre en compte est que, comme avec sed, la "source" sera traitée comme une regexp donc RE caractères de remplacement (par exemple,". " ou "*") sera satisfaisant - si c'est un problème, laissez-nous savoir qu'il y a une simple awk solution, mais pas d'équivalent sed solution.
awk pour la recherche et le remplacement d'une chaîne plutôt qu'une regexp: