Texte de substitution (de la lecture du fichier et l'enregistrement sur le même fichier) sur linux avec sed
Je veux lire le fichier "teste", de faire quelques "rechercher&remplacer" et remplacer "teste" avec les résultats. Le plus proche que j'ai obtenu jusqu'à présent est:
$cat teste
I have to find something
This is hard to find...
Find it wright now!
$sed -n 's/find/replace/w teste1' teste
$cat teste1
I have to replace something
This is hard to replace...
Si j'essaie de l'enregistrer dans le même fichier comme ceci:
$sed -n 's/find/replace/w teste' teste
ou:
$sed -n 's/find/replace/' teste > teste
Le résultat sera un fichier vide...
Je sais que je suis absent quelque chose de très stupide, mais toute aide sera la bienvenue.
Mise à JOUR: sur la Base des conseils donnés par les gens et ce lien: http://idolinux.blogspot.com/2008/08/sed-in-place-edit.html voici mon code mis à jour:
sed -i -e 's/find/replace/g' teste
Vous devez vous connecter pour publier un commentaire.
Sur Linux,
sed -i
est le chemin à parcourir.sed
n'est pas vraiment conçu pour la modification sur place, si, historiquement, c'est un filtre, un programme qui modifie un flux de données dans un pipeline, et pour cette utilisation, vous devrez écrire dans un fichier temporaire, puis de le renommer.La raison pour laquelle vous obtenez un fichier vide, c'est que la coquille s'ouvre (et tronque le fichier avant d'exécuter la commande.
ed
est mieux pour l'édition, mais pas très pratique pour une utilisation dans les scripts, c'est pourquoised
a augmenté de forme non standard (par POSIX)-i
option.perl -i
qui fait bien la même chose (et a été la source d'inspiration pour l'ajout de-i
àsed
), mais il est assez lourd.Vous voulez:
sed -i 's/foo/bar/g' file
Vous souhaitez utiliser "sed-i". Ce mises en place.
Dans l'édition avec perl
ou
pour de nombreux fichiers
La
ed
solution est:Ou sans le heredoc
En fait, si vous utilisez
-i
drapeau,sed
copie de l'original de la ligne que vous éditez.Donc cela pourrait être une meilleure façon: