Unix: Comment puis-je ajouter le préfixe de sortie à un fichier?
Plus précisément, je suis en utilisant une combinaison de >>
et tee
personnalisé dans un alias pour stocker de nouvelles Homebrew mises à jour dans un fichier texte, ainsi que la sortie de l'écran:
alias bu="echo `date "+%Y-%m-%d at %H:%M"` \
>> ~/Documents/Homebrew\ Updates.txt && \
brew update | tee -a ~/Documents/Homebrew\ Updates.txt"
Question: Que faire si je souhaite ajouter cette sortie dans mon texte, c'est à dire placé au début du fichier, par opposition à l'ajoutant à la fin?
Edit1: Comme quelqu'un l'a signalé dans les réponses ci-dessous, l'utilisation de fichiers temporaires peut être une bonne approche, qui au moins m'a aidé en partie:
targetLog="~/Documents/Homebrew\ Updates.txt"
alias bu="(brew update | cat - $targetLog \
> /tmp/out1 && mv /tmp/out1 $targetLog \
&& echo `date "+%Y-%m-%d at %H:%M":%S` | \
cat - $targetLog > /tmp/out2 \
&& mv /tmp/out2 $targetLog)"
Mais le problème, c'est la sortie vers STDOUT (précédemment rendues possibles par eto), dont je ne suis pas sûr, peut être incorporé dans ce fichier temporaire approche ...?
Vous n'avez pas besoin
echo `date...`
... date...
sur elle-même est assezOriginalL'auteur Henrik | 2011-10-18
Vous devez vous connecter pour publier un commentaire.
sed sera heureux de le faire pour vous, à l'aide de
-i
à modifier, par exemple.-i '' -e
...OriginalL'auteur Hasturkun
Cela passe par la création d'un fichier de sortie:
Disons que nous avons le contenu initial sur file.txt
Donc, file.txt est notre " bas " fichier texte. Maintenant ajouter une nouvelle "production" fichier
Maintenant, la production a, le contenu de la façon dont nous voulons. Si vous avez besoin de votre nom ancien:
OriginalL'auteur mimoralea
La fois simple et sûr moyen de modifier un fichier d'entrée à l'aide de bash outils, est d'utiliser un fichier temporaire, par exemple.
sed -i
utilise un fichier temporaire en coulisses (mais pour être robustesed
besoin de plus).Certaines des méthodes utilisées ont une subtile "peut casser des choses" piège, quand, plutôt que de l'exécution de votre commande sur le réel fichier de données, vous l'exécutez sur un lien symbolique (pour le fichier que vous avez l'intention de le modifier). Sauf si pris en charge correctement, cela peut briser le lien et de le convertir en un réel fichier qui reçoit les mods et les feuilles de la original du fichier sans l'intention de mods et sans le lien (pas d'erreur de sortie-code)
Pour éviter cela avec
sed
, vous devez utiliser le--follow-symlinks
option.Pour d'autres méthodes, juste être conscient qu'il doit suivre les liens symboliques (lorsque vous agissez sur ce lien)
À l'aide d'un fichier temporaire, puis
rm temp file
ne fonctionne que si "fichier" n'est pas un lien symbolique.Un moyen sûr est d'utiliser
sponge
de colis moreutilssponge
est une bonne façon de gérer ce type de situation.Voici un exemple, à l'aide de
sponge
Comment une modification de l'inode faire un symbolique lien invalide? Je suppose que vous voulez dire qu'il annule des liens en dur.
@Mark Edgar:, je l'ai eu dans le mauvais sens. Le problème se pose lorsque vous agissez sur le lien.. j'ai règlements ultérieurs de la réponse..... @hced: je n'ai aucune idée à propos de Darwin, mais voici un lien vers moreutils...
Si vous avez MacPorts, alors vous pouvez utiliser
port install moreutils
homebrew a l'éponge dans le moreutils. brew install moreutils [2.2.3] ==> Télécharger homebrew.bintray.com/bottles/...
OriginalL'auteur Peter.O
Façon la plus simple de l'OMI serait l'utilisation de l'écho et le chat:
Ou pour votre exemple de coeur de remplacer le
tee -a ~/Documents/Homebrew\ Updates.txt
aveccat - ~/Documents/Homebrew\ Updates.txt > ~/Documents/Homebrew\ Updates.txt
Edit: Comme l'a déclaré hasturkun cela ne fonctionne pas, essayez:
Mais ce n'est pas le moyen le plus efficace de le faire plus...
Je l'ai utilisé avant (Le bon vieux
cat image.jpg secret.zip > image.jpg
truc) Edit: Oups, doit avoir utilisé un autre, ouais scratch cette réponse.L'essayer, la coquille s'ouvre le fichier en écriture, en la tronquant, puis exécute chat (qui, à mon système de causes chat pour se plaindre que le fichier d'entrée est le fichier de sortie), à l'origine du fichier pour contenir uniquement le contenu de la deuxième fichier
Les travaux de cette. Tester vous-même sur votre propre. Certaines personnes aiment faire des commentaires sans l'essayer par eux-mêmes.
OriginalL'auteur J V
Essayer cette http://www.unix.com/shell-programming-scripting/42200-add-text-beginning-file.html
Il n'y a pas directement de l'opérateur ou de commande autant que je sache.Vous utilisez echo, le chat, et le mv pour obtenir l'effet.
OriginalL'auteur SidJ
Je n'ai aucune idée de pourquoi vous voulez le faire. C'est assez standard que les journaux de ce genre ont, plus tard, les inscriptions, bien, plus loin dans le fichier.
OriginalL'auteur Mark Edgar