Beaucoup de gens savent comment utiliser sed:

sed 's/hello/bonjour/' greetings.txt echo "hi there" | sed 's/hi/hello/' 

Que vais couvrir 80% de votre sed utilisation. Ce poste est sur l’autre 20%. Pensez-y comme un cours de suivi après sed

afin que vous puissiez changer les flux en sifflant la sortie en sed. Que faire si vous souhaitez modifier le fichier en place?

le Remplacement sur place

sed livré avec la balise -i drapeau., Nous allons consulter man sed:

-i extension Edit files in-place, saving backups with the specified extension. 

nous allons essayer ça:

Notez que sur les systèmes Linux, un espace après la balise -i peut causer une erreur, donc insteadof -i .bak, vous pouvez essayer -i.bak.

Si le fichier d’origine contenu sont enregistrés dans un nouveau fichier appelé .bak,et la nouvelle, version modifiée dans le texte original greetings.txt. Maintenant, tous les on doit faire c’est:

rm greetings.txt.bak 

Et nous avons modifié le fichier en place., Vous êtes maintenant le toast du bureau, chanté par des bardes.

Let’s get 3ll3

Attendez, ce n’est plus qu’ man entrée sed -i:

If a zero-length extension is given, no backup will be saved. It is not recommended to give a zero-length extension when in-place editing files, as you risk corruption or partial content in situations where disk space is exhausted, etc. 

longueur Nulle extension, hein? Utilisons notre fichier original greetings.txt avant de le changer:

le -i '' (ou, sous Linux, juste -i) indique à sed d’utiliser un zéro-lengthextension pour la sauvegarde., Une extension de longueur zéro signifie que la sauvegarde a le même nom que le nouveau fichier, donc aucun nouveau fichier n’est créé. Il supprime la nécessité d’exécuterrm après avoir effectué un remplacement sur place.

je n’ai rencontré aucun problème d’espace disque avec-i ''. Si vous êtes inquiet à propos de l’avertissement de la page man, vous pouvez utiliser la technique -i .bak que je mentionne dans la section précédente.

Rechercher et remplacer dans plusieurs fichiers

On aime sed tellement que nous l’utilisons dans notre replace script., Itworks comme ceci:

replace foo bar **/*.rb 

Le premier argument est la chaîne que nous trouvons. La seconde est la chaîne avecque nous remplaçons. Le troisième est un modèle correspondant à la liste des fichiers dansque nous voulons restreindre notre recherche.