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.
Laisser un commentaire