Je veux utiliser cat avec des caractères génériques dans bash afin d'imprimer plusieurs petits fichiers (chaque fichier est une phrase) sur la sortie standard. Cependant, le contenu du fichier séparé n'est pas séparé par une nouvelle ligne, ce que j'aimerais pour faciliter la lecture.
Comment puis-je ajouter un délimiteur de fichier quelconque à cette commande?
in "$@"
- c'est implicite.Utilisez simplement une boucle au lieu de simple
cat
:la source
Si vous voulez un nom de fichier entre les fichiers, utilisez
tail
:(Au cas où vous voudriez
tac
au lieu decat
, certainestail
implémentations ont une-r
option pour unetac
fonctionnalité équivalente )la source
Cela fonctionnera:
Vous n'avez pas besoin de boucles shell ou autre, et cela suivra toujours la sortie d'un fichier avec une ligne
\n
électronique - à l'exception peut-être de la toute dernière.Sinon, si vous voulez qu'une ligne vide soit sortie entre la sortie de chaque fichier, cela pourrait fonctionner:
Cela suivra toujours la sortie d'un fichier avec une ligne
\n
électronique et une ligne vierge supplémentaire .Vous pouvez l'appeler comme:
la source
for n in 1 2 3; do printf "$n" >"$n"; done; sed '' -- [123]
sed
doit toujours imprimer une ligne\n
électronique avant d'imprimer quoi que ce soit d'autre, la dernière ligne du dernier fichier peut ne pas être\n
ajoutée à une ligne électronique. je pourrais jurer ive répondu à cette question avant.1\n2\n3
. Ça marche. c'est toujours le cas. qu'est-ce que cela imprime pour vous?\n
en RHS n'est pas standard. Vous pouvez utilisersed -e '$G'
.Semblable à la réponse de @terdon , si vous préférez également voir le nom de fichier à l'avenir, vous pouvez utiliser la
head
commande:head
la valeur par défaut est les 10 premières lignes, donc l'utiliser sans options de commande pour votre cas (une phrase par fichier) est tout à fait correct. Sinon, vous avez besoin de l'-n X
option.la source
Une autre façon - utilisez
grep -h
pour rechercher simplement la chaîne vide dans chaque fichier. Cela correspondra à toutes les lignes, quel que soit leur nombre ou qu'elles se terminent par une nouvelle ligne ou non. les résultats de grep se terminent toujours par une nouvelle ligne. L'-h
option supprime le préfixe de chaque ligne de sortie avec le nom de fichier dont elle provient:Ou vous pouvez utiliser GNU
paste
en-s
mode erial avec newline comme délimiteur:la source