Eu quero usar gato com curingas no bash para imprimir vários arquivos pequenos (cada arquivo é uma frase) para a saída padrão. No entanto, o conteúdo do arquivo separado não é separado por uma nova linha, o que eu gostaria para facilitar a leitura.
Como posso adicionar um delimitador de arquivo de algum tipo a este comando?
in "$@"
- está implícito.Basta usar um loop em vez de simples
cat
:fonte
Se você quiser o nome do arquivo entre os arquivos, use
tail
:(Caso você queira, em
tac
vez decat
, algumatail
implementação tem-r
opção paratac
funcionalidade equivalente )fonte
Isso funcionará:
Você não precisa de nenhum loop de shell ou não, e isso sempre seguirá a saída de um arquivo com uma linha de
\n
ew - exceto, talvez, a última.Caso contrário, se você desejar que uma linha em branco seja impressa entre a saída de cada arquivo, isso poderá funcionar:
Isso sempre seguirá a saída de um arquivo com uma linha
\n
ew e uma linha em branco adicional .Você pode chamar assim:
fonte
for n in 1 2 3; do printf "$n" >"$n"; done; sed '' -- [123]
sed
deve sempre imprimir uma linha\n
eletrônica antes de imprimir qualquer outra coisa; a última linha do último arquivo pode não ter uma linha\n
eletrônica anexada. Eu poderia jurar que respondi a essa pergunta antes.1\n2\n3
. funciona. sempre faz. o que é impresso para você?\n
em RHS não é padrão. Você pode usarsed -e '$G'
.Semelhante à resposta do @terdon , se você preferir também ver o nome do arquivo no futuro, poderá usar o
head
comando:head
o padrão é 10 primeiras linhas, portanto, usá-lo sem opções de comando para o seu caso (uma frase por arquivo) é perfeitamente adequado. Caso contrário, você precisa da-n X
opção.fonte
Outra maneira - use
grep -h
para simplesmente procurar a string vazia em cada arquivo. Isso corresponderá a todas as linhas, independentemente de quantas ou se a nova linha terminou ou não. Os resultados grep são sempre terminados em nova linha. A-h
opção suprime o prefixo de cada linha de saída com o nome do arquivo de origem:Ou você pode usar o GNU
paste
no-s
modo serial com nova linha como delimitador:fonte