Gostaria de pegar a saída de um comando bash (neste caso, grep) e inserir uma linha em branco a cada duas linhas:
not
like
this ...
but
like
this!
Maneira inteligente de fazer isso no bash?
Responder1
Existem muitas maneiras de fazer isso para arquivos de texto. O mais simples é provavelmente
$ sed G filename
Responder2
Usando pr
de coreutils
:
$ grep '' file | pr -Td
not
like
this ...
(observe que issofazespaço duplo na linha final - ao contrário, digamos, de sed '$!G'
). De man pr
:
-d, --double-space
double space the output
-T, --omit-pagination
omit page headers and trailers, eliminate any pagination by form
feeds set in input files
Responder3
Começando com um arquivo como:
$ cat >file
not
like
this ...
sed funcionará:
$ sed 's/$/\n/' file
not
like
this ...
Então vai perguntar:
$ awk 1 ORS='\n\n' file
not
like
this ...
1
é a abreviação enigmática do awk para imprimir a linha e ORS='\n\n'
diz ao awk para separar as linhas de saída não com apenas uma, mas com duas novas linhas.
Mais
Um comando sed mais curto, conforme sugerido porchave de aço, é:
sed '$!G' file
O G
comando anexa uma nova linha e omantenha espaçoaté o final doespaço padrão. Como, por padrão, o espaço de espera está vazio, isso tem o efeito de apenas adicionar uma nova linha extra no final de cada linha. O prefixo $!
diz ao sed para fazer isso em todas as linhasexcetoo último.
Responder4
Test
10
20
30
Output
perl -pe "s/$/\n/" test
10
20
30