J'écris un script bash pour rechercher un fichier s'il n'existe pas, puis créez-le et ajoutez-y ceci:
Host localhost
ForwardAgent yes
Donc, "line then new line 'tab' then text"
je pense que c'est un format sensible. Je sais que tu peux faire ça:
cat temp.txt >> data.txt
Mais cela semble bizarre depuis ses deux lignes. Y at-il un moyen d'ajouter cela dans ce format:
echo "hello" >> greetings.txt
shell
text-processing
io-redirection
La légende
la source
la source
( echo "line 1" ; echo "line 2" ) >>greetings.txt
.{ echo "line 1" ; echo "line 2"; } >>greetings.txt
cat <<EOT
leEOT
est juste une chaîne aléatoire. Pourrait êtrecat <<FOO
aussi.Ou, si vous voulez un onglet littéral (plutôt que les quatre espaces de votre question):
Vous pouvez obtenir le même effet avec
echo
, mais sa variation varie d’une mise en œuvre à l’autre, alors qu’elleprintf
est constante.la source
la source
Une autre approche consiste à utiliser
tee
Quelques lignes de choix de
tee
la page de manuel de:la source
SED peut ajouter une ligne à la fin d'un fichier de la manière suivante:
sed -i '$ a text to be inserted' fileName.file
$
sélectionne la fin du fichier, le luia
dit d'ajouter, puis le texte à insérer. Ensuite, bien sûr, le nom du fichier.Source: http://www.yourownlinux.com/2015/04/sed-command-in-linux-append-and-insert-lines-to-file.html
========== EDIT == ==========
Cette approche présente-t-elle un avantage supplémentaire par rapport à d'autres solutions?
Oui, cette approche présente l’avantage supplémentaire d’ajouter à tout retour de fichier dans une recherche, par exemple:
find . -name "*.html" -exec sed -i '$ a </html>' {} \;
J'ai utilisé l'exemple ci-dessus pour insérer la balise HTML de fin qui manquait sur chaque page HTML dans un certain nombre de répertoires.
===================================
la source
sed
. BSDsed
renfloue avec l'erreur:command a expects \ followed by text
. Donc, ne l'utilisez pas pour une solution scriptée; c'est susceptible de se briser. (Ou faites-le correctement, car la syntaxe requise par BSD est compatible POSIX et fonctionnera également sous GNUsed
.find
comme suit:find . -name "*.txt" -exec sh -c 'printf "%s\n\t%s\n" "Host localhost" "ForwardAgent yes" >> "$1"' sh {} ";"
.>
,>>
) et ne souffre donc pas de problèmes tels que l'exécutionsudo echo 'something' > /file
. Pour moi , il permet parfaitement d'ajouter une ligne à un fichier dans un contenant LXD comme ça:lxc exec c sed -- '$ a newline' /myfile
.echo "a new line" >> foo.file
ne créera pas de nouvelle ligne lorsque le fichier ne sera pas en fin de nouvelle ligne, mais lesed -i '$ a a new line' foo.file
fera. Ilsed
est donc préférable que vous ajoutiez toujours une nouvelle ligne au fichier.J'ai utilisé sed car il peut être utilisé avec sudo. Par exemple:
l'alternative est très laide comme:
et encore plus laid quand on a fini avec ssh.
la source
sed -i
pas une extension comme argument? Votre exemple peut avoir des paramètres incorrects.Une autre ligne est:
Je préférerais l'
-e
option pensée, car cela donne plus de contrôle:la source
On peut émuler
cat >> out.txt
avec Perl ou Python pour obtenir le même effet. Perl:Et Python:
Notez que pour Python, vous devrez appuyer sur Ctrl+ Ddeux fois. Voir la question connexe sur stackoverflow pour plus d'informations.
la source
Voici un exemple pour ajouter plusieurs lignes dans un fichier:
la source
En plus de la réponse principale, si le fichier nécessite des autorisations super-utilisateur, il ne suffit pas de l'ajouter
sudo
devantecho
.En effet, shell interrompt les commandes et
echo
s’exécute en tant que root, mais>>
avec des privilèges normaux.Cela fonctionnera pour le super utilisateur:
sudo su -c "echo 'Line 3' >> greetings.txt"
la source
su
ici (sudo su
c'est pas bon). Mais vous avez raison de dire que vous avez besoin de quelque chose pour gérer la redirection du shell; peut - êtresudo sh -c "echo stuff >> file.txt"
. Pas d'économie nette mais une meilleure pratique.