Quelle est la manière la plus simple d'ajouter du texte à un fichier sous Linux?
J'ai jeté un œil à cette question , mais la réponse acceptée utilise un programme supplémentaire ( sed
) Je suis sûr qu'il devrait y avoir un moyen plus simple avec echo
ou similaire.
sudo !!
- qui exécute la dernière commande avec lesudo
préfixe. J'ai récemment découvert que cela fonctionne également avecnano
etc (en essayant accidentellement denano nano auth
...)!!
avant, génial. Très souvent, je fais des trucs commecat /var/log/apache/error.log
et je me fais refuser la permission. Cela pourrait également être fait avec un identifiant de l'historique, par exemplesudo !1419
, cela exécutera la commande en ligne1419
dans l'historique en tant que sudo.Que diriez-vous:
L'utilisation de l'
>>
opérateur ajoutera des données à la fin du fichier, tandis que l'utilisation de la>
remplacera le contenu du fichier s'il existe déjà.Vous pouvez également utiliser
printf
de la même manière:Notez qu'il peut être dangereux d'utiliser ce qui précède. Par exemple, si vous avez déjà un fichier et que vous devez ajouter des données à la fin du fichier et que vous oubliez d'ajouter la dernière,
>
toutes les données du fichier seront détruites. Vous pouvez modifier ce comportement en définissant lanoclobber
variable dans votre.bashrc
:Maintenant, lorsque vous essayez de le faire,
echo "hello" > file.txt
vous recevrez un avertissementcannot overwrite existing file
.Pour forcer l'écriture dans le fichier, vous devez maintenant utiliser la syntaxe spéciale:
Vous devez également savoir que, par défaut,
echo
ajoute un caractère de fin de ligne qui peut être supprimé à l'aide de l'-n
indicateur:Références
echo(1) - Linux man page
noclobber variable
I/O Redirection
la source
cat
, mais vous feriez mieux de faire attention à utiliser à la>>
place de>
!sudo rm -r /
=)sudo rm -r /
quesudo rm -rf /
! ^ _ ^ Y a-t-il un indicateur qui demanderait une confirmation avant d'écraser le contenu d'un fichier existant avec>
? Aliaser que de toujours utiliser un tel drapeau semble être une bonne idée.set -o noclobber
dans votre.bashrc
alors vous ne pouvez pas écraser un fichier existant sans utiliser la syntaxe spécialeecho "hello" >| <filename>
L'autre moyen possible est:
Le
-a
sera ajouté à la fin du fichier.Si besoin
sudo
, utilisez:la source
>/dev/null
à la fin empêche le "texte" d'être affiché dans votre console.Suivi de la réponse acceptée.
Vous avez besoin d'autre chose que CTRL-D pour désigner la fin si vous l'utilisez dans un script . Essayez plutôt ceci:
Cela ajoutera du texte au fichier indiqué (non compris "EOF").
Il utilise un document ici (ou heredoc) .
Cependant, si vous avez besoin d'ajouter sudo au fichier indiqué, vous rencontrerez des problèmes lors de l'utilisation d'un heredoc en raison de la redirection d'E / S si vous tapez directement sur la ligne de commande.
Cette variante fonctionnera lorsque vous tapez directement sur la ligne de commande:
Ou vous pouvez utiliser à la
tee
place pour éviter le problème sudo de ligne de commande vu lors de l'utilisation de heredoc avec cat:la source
cat << 'EOF' >
des années et je ne savais pas commentcat << 'EOF' >>
ajouter! Merci