Deixe-me esclarecer sobre o caractere de nova linha:
$ echo Hello > file1 ; cat file1
Hello
$ echo -n Hello > file2 ; cat file2
Hello$
Aqui você pode ver que file1
possui um caractere de nova linha no final, enquanto file2
não possui.
Agora suponha que eu tenho um file
:
$ cat file
Hello
Welcome to
Unix
$
E eu quero adicionar and Linux
no final do arquivo, em seguida, echo " and Linux" >> file
será adicionado à nova linha. Mas eu quero a última linha comoUnix and Linux
Portanto, para contornar o problema, quero remover o caractere de nova linha no final do arquivo. Portanto, como faço para remover o caractere de nova linha no final do arquivo?
shell-script
text-processing
newlines
Pandya
fonte
fonte
sed '$s/$/ and linux/'
Respostas:
Se tudo o que você deseja fazer é adicionar texto à última linha, é muito fácil com o sed. Substitua
$
(correspondência de padrão no final da linha) pelo texto que você deseja adicionar, apenas nas linhas do intervalo$
(que significa a última linha).que no Linux pode ser reduzido para
Se você deseja remover o último byte de um arquivo, o Linux (mais precisamente o GNU coreutils) oferece o
truncate
comando, o que facilita muito isso.Uma maneira POSIX de fazer isso é com
dd
. Primeiro determine o tamanho do arquivo e, em seguida, trunque-o para um byte a menos.Observe que esses dois truncam incondicionalmente o último byte do arquivo. Convém verificar se é uma nova linha primeiro:
fonte
perl -pi -e 'chomp if eof' myfile
. Comparadotruncate
oudd
não vai deixar você com um arquivo quebrado, semyfile
na verdade não houver novas linhas à direita.No entanto, você pode remover o caractere de nova linha da linha
tr -d '\n'
:Você pode remover o caractere de nova linha no final do arquivo usando a seguinte maneira fácil:
head -c -1 file
De
man head
:truncate -s -1 file
de
man truncate
:fonte
head -c -1 file | tee file
seguro? Nãotee
truncaria o arquivo antes de iniciar?tee
apenas tem que abrir o arquivo, enquanto quehead
tem que ler e escrever seu conteúdo,tee
na prática vencerá a corrida, exceto às vezes para arquivos muito pequenos.Você pode conseguir isso com o perl como:
Comparado
truncate
oudd
isso não vai deixar você com um arquivo quebrado, semyfile
na verdade não houver novas linhas à direita.(a resposta é construída a partir do comentário e com base nessa resposta )
fonte
Aqui está uma maneira de
sed
- na última ($
) linha do arquivo, pesquise e substitua tudo e qualquer coisa (.*
) por "o que você correspondeu", seguido de "e Linux":Uma solução ainda mais simples, cortesia de Isaac , é:
Isso substitui o final de linha (simbólico) pelo texto fornecido.
fonte