Quiero usar cat con comodines en bash para imprimir varios archivos pequeños (cada archivo es una oración) a la salida estándar. Sin embargo, el contenido del archivo separado no está separado por una nueva línea, lo que me gustaría para facilitar la lectura.
¿Cómo puedo agregar un delimitador de archivo de algún tipo a este comando?
in "$@"
- es implícito.Simplemente use un bucle en lugar de simple
cat
:fuente
Si desea un nombre de archivo entre archivos, use
tail
:(En caso de que desee en
tac
lugar decat
, algunatail
implementación tiene la-r
opción detac
funcional equivalente )fuente
Esto funcionará:
No necesita ningún bucle de shell o de otro modo, y esto siempre seguirá el resultado de un archivo con una línea de
\n
conexión, excepto quizás el último.De lo contrario, si desea que se genere una línea en blanco entre la salida de cada archivo, esto podría funcionar:
Eso siempre seguirá la salida de un archivo con una línea
\n
electrónica y una línea en blanco adicional .Puedes llamarlo así:
fuente
for n in 1 2 3; do printf "$n" >"$n"; done; sed '' -- [123]
sed
debe imprimir siempre una línea\n
electrónica antes de imprimir cualquier otra cosa, aunque la última línea del último archivo podría no tener una línea\n
electrónica adjunta. Podría jurar que he respondido esta pregunta antes.1\n2\n3
. funciona. siempre lo hace ¿Qué imprime para ti?\n
en RHS no es estándar. Puedes usarsed -e '$G'
.Similar a la respuesta de @terdon , si prefieres ver el nombre de archivo también en el futuro, puedes usar el
head
comando:head
el valor predeterminado es las primeras 10 líneas, por lo que usarlo sin opciones de comando para su caso (una oración por archivo) está perfectamente bien. De lo contrario, necesita la-n X
opción.fuente
Otra forma: use
grep -h
para buscar simplemente la cadena vacía en cada archivo. Esto coincidirá con todas las líneas, independientemente de cuántas o si la nueva línea haya terminado o no. Los resultados de grep son siempre terminados en nueva línea. La-h
opción suprime el prefijo de cada línea de salida con el nombre de archivo del que proviene:O podría usar GNU
paste
en-s
modo erial con nueva línea como delimitador:fuente