Sous Linux sed -i
modifiera les fichiers d'entrée en place. Cependant, cela ne fonctionne pas sur Solaris.
sed -i '$ s/OLD/NEW/g' test
sed: illegal option -- i
Que puis-je utiliser à la place de sed -i
sur Solaris?
Vous devrez répliquer -i
vous-même en stockant les résultats dans un fichier temporaire, puis en remplaçant le fichier d'origine par le fichier temporaire. Cela peut sembler inélégant, mais c'est tout sed -i
fait sous les couvertures.
sed '$ s/OLD/NEW/g' test > test.tmp && cat test.tmp > test && rm test.tmp
Si vous vous en souciez, vous pouvez le rendre un peu plus robuste en utilisant mktemp
:
tmp=$(mktemp test.XXXXXX)
sed '$ s/OLD/NEW/g' test > "$tmp" && cat "$tmp" > test && rm "$tmp"
Ce n'est pas exactement la même chose que sed -i, mais j'ai eu un problème similaire. Vous pouvez le faire en utilisant Perl:
Perl -pi -e 's/find/replace/g' file
faire le copier/déplacer ne fonctionne que pour des fichiers uniques. si vous voulez remplacer du texte dans chaque fichier d'un répertoire et de sous-répertoires, vous avez besoin de quelque chose qui le fasse en place. vous pouvez le faire avec Perl et trouver:
find . -exec Perl -pi -e 's/find/replace/g' '{}' \;