2010-08-26 2 views
22

J'utilise la commande sed suivante sous UNIX Solarissed -i + ce que la même option dans SOLARIS

de la machine SOLARIS

sed -i '$ s/OLD/NEW/g' test   
sed: illegal option -- i 

quelqu'un peut avoir idée de ce que l'option illégale dans Solaris (en place option « -i » dans linux j'ai besoin d'autre option dans Solaris avec le même effet)

Lidia

Répondre

17

Vous devez reproduire vous-même le comportement de -i par stocker 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 ce que fait sed -i sous les couvertures.

sed '$ s/OLD/NEW/g' test > test.tmp && mv test.tmp test 

Si vous soin vous pouvez le rendre un peu plus robuste en utilisant mktemp:

TMP=$(mktemp test.XXXXXX) 
sed '$ s/OLD/NEW/g' test > "$TMP" && mv "$TMP" test 
+0

peut-être d'autre choix de awk je ne peux pas déplacer le fichier dans un autre fichier – lidia

+0

Toute commande qui modifie un fichier « en place » est entrain de faire ce maquillage copie mouve- copier shuffle. Sauf dans certains cas particuliers, vous ne pouvez pas modifier un fichier en place. Si 'mv' ne fonctionne pas, c'est peut-être' cp'. –

+1

Votre commande modifiera également les permissions du fichier modifié. 'sed -i' ne le fera pas. Il pourrait être préférable d'utiliser 'cat' et' rm' au lieu de 'mv':' && cat "$ TMP"> test && rm "$ TMP" '. – ceving

20

Il est pas exactement la même chose que sed -i, mais j'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 les fichiers individuels. Si vous voulez remplacer du texte à travers chaque fichier dans un répertoire et sous-répertoire, vous avez besoin de quelque chose qui le fait en place. vous pouvez le faire avec perl et trouver:

find . -exec perl -pi -e 's/find/replace/g' '{}' \; 
+0

Meilleur remplacement direct. Merci. – woot

Questions connexes