Como remover um CRLF à direita de um arquivo?

3

Eu tenho um arquivo binário com um CRLF à direita (2 bytes no total) que desejo remover. Como devo fazer isso? Por favor, note que estou usando o busybox e não tenho perl.

    
por michelemarcon 29.08.2012 / 16:25

3 respostas

4

Com uma instalação típica do BusyBox, acho que você terá que analisar a saída de ls para obter o tamanho. Depois de ter o tamanho, extraia os primeiros n-2 bytes do arquivo com head .

size=$(ls -Lnd -- "$file" | awk 'NR==1 {print $5}')
head -c "$(($size - 2))" <"$file" >"$file.new"

Se você quiser truncar o arquivo, use dd .

size=$(ls -Lnd -- "$file" | awk 'NR==1 {print $5}')
dd if=/dev/null of="$file" bs="$(($size - 2))" seek=1
    
por 30.08.2012 / 04:19
4

Obtenha o tamanho do arquivo, subtraia dois. Você obtém $n (como com n=$(wc -c < the-file) ) e executa

dd bs=1 seek="$n" < /dev/null of=the-file

Ou se você tiver um truncate que suporte deslocamentos negativos (significando deslocamentos do final do arquivo):

truncate  -s -2 the-file

Ou com ksh93 :

: 1<>; the-file >#((EOF-2))

(o <>; é uma forma especial do operador de redirecionamento padrão <> que trunca o arquivo depois que o comando (here : ) retorna, se for bem-sucedido, >#((...)) é um operador de busca).

    
por 29.08.2012 / 17:30
-2
tr -d '3' < input > output
    
por 30.08.2012 / 05:06