removendo a última linha de um arquivo que não está funcionando? [duplicado]

0

Eu tenho este arquivo TXT que é criado por um script bash e no final eu quero remover a última linha desse arquivo que está vazio.

head --lines=-1 r3.txt > r4.txt

sed '$d' r3.txt > r4.txt

cat r3.txt | head -n -1  > r4.txt

r4.txt continua a ter a última linha vazia ...

Eu estou em um servidor linux do CentOS 6.x.

Isto tem alguma coisa a ver com finais de linha (unix x windows)?

Alguma pista?

    
por SpaceDog 15.04.2014 / 21:16

1 resposta

1

Provavelmente não há linha vazia no final.

Os arquivos de texto Unix consistem em linhas, cada uma delas termina em um caractere de alimentação de linha ( '\n' , ^J , 0x0a ). Ou seja, o caractere de alimentação de linha não é um separador de linha, mas um caractere de término de linha. Isso também é verdade para a última linha e, portanto, para o arquivo como um todo.

Por exemplo, um arquivo de texto contendo

abc
def

ficará assim quando visualizado com xxd :

0000000: 6162 630a 6465 660a                      abc.def.

Você pode ver claramente o único 0a no final. Por outro lado, se houver mais uma linha vazia no final, você obtém

0000000: 6162 630a 6465 660a 0a                   abc.def..

Note que agora existem dois 0a bytes.

Você também pode ver isso com wc -l , que conta as linhas. No primeiro arquivo, ele dará 2 , no segundo arquivo, ele dará 3 . Observe também que, se o feed de linha final estiver ausente (o que significa que o arquivo não é realmente um arquivo de texto válido, embora a maioria das ferramentas possa tratá-lo de qualquer maneira), wc contará apenas uma linha.

    
por 15.04.2014 / 21:37

Tags