Je peux faire cat file.txt
pour obtenir le contenu d'un fichier, mais je veux aussi clouer sur une dernière ligne de mon choix.
J'ai essayé la tuyauterie (cat file.txt ; echo "My final line") |
mais seule la ligne finale passe à travers le tuyau. Comment puis-je rejoindre le chat et la ligne finale?
Modifier pour un point de clarification: je ne souhaite pas modifier le fichier lui-même. Je suis conscient que si c'était le cas, je pourrais le faire echo "My final line" >> file.txt
ou echo "My final line" | tee -a file.txt
mais j'essaie seulement de faire l'ajout dans le contexte de cette commande particulière afin que je puisse diriger la concaténation de file.txt
et "My final line"
.
command-line
pipe
cat
echo
Contrebasse
la source
la source
echo "My final line" >> file.txt
?>>
si je voulais éditer le fichier lui-même.file.txt
? Votre extrait de pipe devrait fonctionner.Réponses:
Vous pouvez exploiter
cat
la capacité de lecture à partir de stdin combinée à sa capacité à lire plusieurs fichiers pour y parvenir.Vous pouvez également ajouter une ligne au préalable:
Notez que vous n'êtes pas limité à une seule ligne.
cat
va lire depuis stdin jusqu'à ce qu'il atteigne EOF. Vous pouvez passer la sortie decurl
, par exemple, pour ajouter ou ajouter à la sortie decat
.la source
(cat file.txt ; echo "My final line") | …
le ferait aussi. Mais utilisercat
ce pour quoi il a été conçu vaut mieux +1.echo "$$" "$BASHPID" | head -q -n 1 /proc/mounts - | cat
vs( head -q -n 1 /proc/mounts; echo "$$" "$BASHPID" ) | cat
ou même{ head -q -n 1 /proc/mounts; echo "$$" "$BASHPID"; } | cat
.Pour ajouter une ligne à un fichier, vous pouvez simplement utiliser l'opérateur de redirection d'ajout de shell,
>>
(le fichier seraopen(2)
-ed avecO_APPEND
indicateur):Maintenant, si vous voulez simplement afficher le contenu du fichier avec une dernière ligne ajoutée, j'utiliserais
cat
avec deux arguments:file.txt
cat
ne concerne que les fichiers), vous pouvez tirer parti de la substitution de processus<()
, qui retournerait un descripteur de fichier (/proc/self/fd/<fd_number>)
.Assembler ces éléments:
Si vous souhaitez que la sortie soit paginée, en supposant qu'il
less
s'agit de votre pageur préféré:la source
<()
fonctionne pour bash, mais pour quels autres obus ça marche? Ksh? Tiret?ksh
,zsh
- Oui,dash
- Non.De
man sed
l'option-e
$
correspond à la dernière ligne eta
ajoute la chaîne.Si vous souhaitez ajouter définitivement la ligne au fichier, utilisez
-i
Changer la commande en
la source
Elle a déjà été clarifiée dans les commentaires de la question, mais l'ajoute à nouveau comme réponse ici.
La commande a noté dans la question,
fonctionne comme prévu - toute la sortie du sous-shell formé par les parenthèses est dirigée vers la deuxième commande.
Si le fichier ne se termine pas par une nouvelle ligne, la chaîne en écho est ajoutée à la dernière ligne - cela est courant avec toutes les autres solutions ici, et peut être résolu en ajoutant un autre écho (vide) avant.
la source
awk
:awk 1 file.txt; echo "My final line"
.awk 1 file
est une bonne astuce pour compenser les EOL manquants à la fin du fichier.echo "\nMy final line"
sans avoir à dépendre deawk