Eu tenho um script que gera o seguinte texto. Essa é a saída de um modem Netopia 2210-02 ADSL2 .
ADSL Line State: Up
ADSL Startup Attempts: 1
ADSL Modulation: DMT
ADSL Data Path: Fast
Datapump Version: DSP 7.2.3.0, HAL 7.2.1.0
SNR Margin: 8.20 9.00 dB
Line Attenuation: 57.50 31.00 dB
Output Power: 17.09 12.34 dBm
Errored Seconds: 0 0
Loss of Signal: 0 476
Loss of Frame: 0 0
CRC Errors: 57921 416
Data Rate: 2880 1024
Como posso remover o caractere de fim de linha de cada linha? Gostaria que a saída se parecesse com algo assim (Sim, é feio):
ADSL Line State: Up ADSL Startup Attempts: 1 ADSL Modulation: DMT ADSL Data Path: Fast Datapump Version: DSP 7.2.3.0, HAL 7.2.1.0 SNR Margin: 8.20 9.00 dB Line Attenuation: 57.50 31.00 dB Output Power: 17.09 12.34 dBm Errored Seconds: 0 0 Loss of Signal: 0 476 Loss of Frame: 0 0 CRC Errors: 57921 416 Data Rate: 2880 1024
Eu tentei algumas soluções como esta, mas elas não funcionam:
# (This simply outputs the contents of the script, unmodified)
stefanl@hosta:~/Work/Cacti $ ./script | sed -e 's/$//'
Eu também tentei usar tr
. Eu estava esperando o seguinte comando para substituir cada caractere de nova linha pelo caractere de espaço. Isso pegaria as várias linhas e as combinaria em uma única linha longa. Em vez disso, isso exibe apenas a última linha de saída. Parece substituir cada linha subseqüente pela próxima linha de saída.
stefanl@hosta:~/Work/Cacti $ ./script | tr '\n' ' '
Data Rate: 2880 1024stefanl@hosta:~/Work/Cacti $
stefanl@hosta:~/Work/Cacti $
Atualização :
Após um exame mais aprofundado, parece que cada linha é precedida por um caractere de retorno. Isso aparece como ^M
ao usar less
. Então, eu adicionei duas tr
declarações. Um para excluir caracteres de nova linha, um para excluir o caractere de retorno.
./script | | tr -d '\n' | tr -d '\r'
fonte
tr '\n' ' '
etr -d '\n'
vão quebrar a linha de uma maneira estranha. Atualizei minha pergunta para mostrar os resultados. Então, talvez eu precise usartr
, mas só preciso descobrir como usá-lo corretamente.tr '\n' ' '
remover o caractere de nova linha e substituí-lo por um caractere de espaço e, portanto, ter uma linha longa.além disso
tr
, alguns outros métodos que você pode usarawk
Concha
sed
fonte
Use
tr -s '\n'
para substituir seqüências de caracteres de nova linha repetidos por uma única ocorrência de nova linha.Exemplo:
(ver
man tr
)fonte
Para remover caracteres de nova linha, é
tr -d '\n' < file
. No entanto, para juntar todas as linhas, é issopaste -sd '\0' file
.tr -d '\n'
produz saída não textual, pois não termina a linha com um caractere de nova linha.Para remover todos os caracteres CR, você pode:
Para remover apenas os caracteres CR que estão no final das linhas:
Ou use
awk
para tudo:Ou use
dos2unix
(o que removeria os CRs à direita e também corrigiria outros problemas com os arquivos de texto dos sistemas operacionais Microsoft):fonte