L'une des tâches les plus courantes lors de l'écriture de scripts Bash ou de l'utilisation de la ligne de commande Linux est la lecture et l'écriture de fichiers.
Cet article explique comment écrire du texte dans un fichier dans Bash, en utilisant les opérateurs de redirection et tee
commande.
Écrire dans un fichier à l'aide des opérateurs de redirection #
Dans Bash, la redirection de la sortie vous permet de capturer la sortie d'une commande et de l'écrire dans un fichier.
Le format général de redirection et d'écriture de la sortie dans un fichier est le suivant :
output > filename
output >> filename
- Le
>
L'opérateur de redirection écrit la sortie dans un fichier donné. Si le fichier existe, il est tronqué à zéro. Sinon, le fichier est créé. Soyez très prudent lorsque vous utilisez cet opérateur car vous risquez d'écraser un fichier important. - Le
>>
L'opérateur de redirection ajoute la sortie à un fichier donné. Le fichier est créé s'il n'existe pas.
Vous devez avoir des autorisations d'écriture sur le fichier. Sinon, vous recevrez une erreur d'autorisation refusée.
Voici un exemple simple montrant comment rediriger la sortie du echo
commande vers un fichier :
echo "this is a line" > file.txt
Pour éviter d'écraser les fichiers existants, activez l'option "noclobber" avec le set
intégré :
set -o noclobber
echo "this is a line" > file.txt
bash: file.txt: cannot overwrite existing file
Le >|
vous permet de remplacer l'option "noclobber" de Bash :
set -o noclobber
echo "this is a line" >| file.txt
Le >>
l'opérateur ajoute la sortie à la fin du fichier, plutôt que d'écraser le fichier :
echo "this is a line" >> file.txt
Utilisez le printf
commande pour créer une sortie complexe :
printf "Hello, I'm %s.\n" $USER > file.txt
Si vous souhaitez écrire plusieurs lignes dans un fichier, utilisez la redirection Here document(Heredoc).
Par exemple, vous pouvez passer le contenu au cat
commande et écrivez-la dans un fichier :
cat << EOF > file.txt
The current working directory is: $PWD
You are logged in as $(whoami)
EOF
Pour ajouter les lignes, modifiez >
avec >>
avant le nom du fichier :
cat << EOF >> file.txt
The current working directory is: $PWD
You are logged in as $(whoami)
EOF
Vous pouvez écrire la sortie de n'importe quelle commande dans un fichier :
date +"Year: %Y, Month: %m, Day: %d" > file.txt
La sortie de la date
commande sera écrite dans le fichier.
Écrire dans un fichier en utilisant le tee
Commande #
Le tee
La commande lit à partir de l'entrée standard et écrit à la fois sur la sortie standard et sur un ou plusieurs fichiers simultanément.
echo "this is a line" | tee file.txt
Le tee
le comportement par défaut de la commande est d'écraser le fichier spécifié, comme le >
opérateur. Pour ajouter la sortie au fichier, appelez la commande avec le -a
(--append
) :
echo "this is a line" | tee -a file.txt
Si vous ne voulez pas le tee
pour écrire sur la sortie standard, vous pouvez la rediriger vers /dev/null
:
echo "this is a line" | tee file.txt >/dev/null
Pour écrire le texte dans plusieurs fichiers, spécifiez les fichiers comme arguments du tee
commande :
echo "this is a line" | tee file_1.txt file_2.txt file_3.txt
Un autre avantage du tee
commande est que vous pouvez l'utiliser en conjonction avec sudo
et écrire dans des fichiers appartenant à d'autres utilisateurs. Pour ajouter du texte à un fichier sur lequel vous n'avez pas d'autorisation d'écriture, ajoutez sudo
avant tee
:
echo "this is a line" | sudo tee file.txt
L'echo
la sortie de la commande est transmise en entrée au tee
, qui élève les autorisations sudo et écrit le texte dans le fichier.
Conclusion #
Sous Linux, pour écrire du texte dans un fichier, utilisez le >
et >>
les opérateurs de redirection ou le tee
commande.