Comment remplacer une valeur avec la sortie d'une commande dans un fichier texte?
J'ai un fichier qui contient:
<?php return 0;
Je veux remplacer dans bash, la valeur 0
par le timestamp actuel.
Je sais que je peux obtenir le timestamp actuel:
date +%s
Et je peut remplacer des chaînes de caractères avec sed
:
sed 's/old/new/g' input.txt > output.txt
Mais comment combiner les deux pour obtenir ce que je veux? Les Solutions ne faisant pas intervenir sed
et date
sont les bienvenus, à condition qu'ils n'utilisent que des scripts shell.
OriginalL'auteur Benjamin | 2013-06-25
Vous devez vous connecter pour publier un commentaire.
En général, utilisez cette syntaxe:
Ce sera pour
<expression>
et de le remplacer avec la sortie decommand
.Pour votre problème spécifique, vous pouvez utiliser les éléments suivants:
Cela remplace toute
0
présentes dans le fichier avec la sortie de la commandedate +%s
. Remarque vous devez utiliser des guillemets pour faire la commande dans$()
être interprété. Sinon, vous obtiendrez un littéral$(date +%s)
.Si vous voulez que le fichier soit mis à jour automatiquement, ajouter
-i
à la commande sed:sed -i "s/...
. Cela s'appelle l'édition.Test
Donné un fichier avec ce contenu:
Nous allons voir de quoi il en retourne:
s/0/$(date +%s)/g
fonctionne très bien!Oh, tu voulais juste changer
0
, non pas à l'ensemble<?php return...
! Juste mis à jour ma réponse.J'ai pris la liberté de mettre à jour votre réponse afin de refléter mon exact de cas d'utilisation 🙂 je ne sais Pas pourquoi quelqu'un downvoted vous sans un commentaire, par la manière.
Comment pourrait-on faire ce travail si la commande a dû être invoqué à chaque fois qu'il ya un match ?
Désolé, la mise en forme a été mauvaise:
perl -pe 's|0|`uuidgen`|g'
OriginalL'auteur fedorqui