Existe uma maneira de head
/ tail
um documento e obter a saída reversa; porque você não sabe quantas linhas existem em um documento?
Ou seja, eu só quero obter tudo, menos as 2 primeiras linhas de foo.txt
anexar a outro documento.
text-processing
tail
head
chrisjlee
fonte
fonte
\n
" .. Ele funciona para todos os números inteiros negativos, exceto os-n -0
que não retornam nada , da mesma maneira que-n 0
faria (usando: head (GNU coreutils) 7.4) ... No entanto, quando um trailing\n
está presente,-n -0
é impresso como se poderia esperar do-
, ie. ele imprime o arquivo inteiro ... Então, ela não funciona para todos os valores negativos não-zero .. mas-0
falha quando não há nenhuma fuga\n
head -n -2
não é compatível com POSIX .Se você deseja todas, exceto as primeiras linhas N-1, ligue
tail
com o número de linhas+N
. (O número é o número da primeira linha que você deseja reter, iniciando em 1, ou seja, +1 significa iniciar no topo, +2 significa ignorar uma linha e assim por diante).Não existe uma maneira fácil e portátil de pular as últimas N linhas. O GNU
head
permitehead -n +N
como contrapartida detail -n +N
. Caso contrário, se você tivertac
(por exemplo, GNU ou Busybox), poderá combiná-lo com a cauda:Portably, você pode usar um filtro awk (não testado):
Se você deseja remover as últimas linhas de um arquivo grande, pode determinar o deslocamento em bytes da peça a ser truncada e executar a truncagem com
dd
.Você não pode truncar um arquivo no lugar no início, mas se precisar remover as primeiras linhas de um arquivo enorme, poderá mover o conteúdo .
fonte
Na
tail
página do manual (GNUtail
, ou seja):Portanto, o seguinte deve anexar todas, exceto as 2 primeiras linhas de
somefile.txt
aanotherfile.txt
:fonte
Para remover as primeiras n linhas, o GNU sed pode ser usado. Por exemplo, se n = 2
A
!
média "excluir este intervalo". Como você pode imaginar, resultados mais complicados podem ser obtidos, por exemploque mostrará a linha 3,4,5,7. Mais poder vem do uso de expressões regulares em vez de endereços.
A limitação é que os números das linhas devem ser conhecidos antecipadamente.
fonte
sed 1,2d
? Mais simples é geralmente melhor. Além disso, nada nos seus exemplos é específico ao GNU Sed; todos os seus comandos usam recursos padrão POSIX do Sed .Você pode usar
diff
para comparar a saída dehead
/tail
para o arquivo original e remover o que é o mesmo, obtendo assim o inverso.fonte
Embora
tail -n +4
a saída do arquivo iniciando na 4ª linha (exceto as 3 primeiras) seja padrão e portátil, suahead
contraparte (head -n -3
exceto todas as últimas 3 linhas) não é.Portably, você faria:
Ou:
(lembre-se de que em alguns sistemas onde
sed
há um espaço padrão de tamanho limitado, isso não é dimensionado para valores grandes den
).Ou:
fonte
Se
<infile
é umlseek()
arquivo normal e possível, então sim , fique à vontade. A descrição acima é uma construção totalmente compatível com POSIX.fonte
Minha abordagem é semelhante à de Gilles, mas, em vez disso, apenas inverto o arquivo com gato e cano que com o comando head.
tac -r thefile.txt | head thisfile.txt (substitui arquivos)
fonte
Espero ter entendido claramente sua necessidade.
Você tem várias maneiras de concluir sua solicitação:
Onde / etc / passwd é seu arquivo
A segunda solução pode ser útil se você tiver um arquivo enorme:
fonte
Solução para BSD (macOS):
Remova as 2 primeiras linhas:
Remova as duas últimas linhas:
... não é muito elegante, mas faz o trabalho!
fonte