J'ai un script qui produit le texte suivant. Il s'agit de la sortie d'un 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
Comment supprimer le caractère de fin de ligne pour chaque ligne? Je voudrais que la sortie ressemble à ceci (oui, c'est moche):
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
J'ai essayé des solutions comme celle-ci, mais elles ne fonctionnent pas:
# (This simply outputs the contents of the script, unmodified)
stefanl@hosta:~/Work/Cacti $ ./script | sed -e 's/$//'
J'ai aussi essayé d'utiliser tr
. Je m'attendais à ce que la commande suivante remplace chaque caractère de nouvelle ligne par le caractère espace. Cela prendrait les multiples lignes et les combinerait en une seule longue ligne. Au lieu de cela, cela n'affiche que la dernière ligne de sortie. Il semble remplacer chaque ligne suivante par la ligne de sortie suivante.
stefanl@hosta:~/Work/Cacti $ ./script | tr '\n' ' '
Data Rate: 2880 1024stefanl@hosta:~/Work/Cacti $
stefanl@hosta:~/Work/Cacti $
Mise à jour :
Après un examen plus approfondi, il semble que chaque ligne soit précédée d'un caractère de retour. Cela apparaît comme ^M
lors de l'utilisation less
. J'ai donc ajouté deux tr
déclarations. Un pour supprimer les caractères de nouvelle ligne, un pour supprimer le caractère de retour.
./script | | tr -d '\n' | tr -d '\r'
la source
tr '\n' ' '
ettr -d '\n'
envelopperont la ligne d'une manière étrange. J'ai mis à jour ma question pour afficher les résultats. Donc, je dois peut-être utilisertr
, mais j'ai juste besoin de comprendre comment l'utiliser correctement.tr '\n' ' '
à supprimer le caractère de nouvelle ligne et à le remplacer par un caractère d'espace, et donc à avoir une longue ligne.en plus
tr
, quelques autres méthodes que vous pouvez utiliserawk
coquille
sed
la source
Permet
tr -s '\n'
de remplacer des séquences de caractères de saut de ligne répétés par une seule occurrence de saut de ligne.Exemple:
(voir
man tr
)la source
Pour supprimer les caractères de nouvelle ligne, c'est
tr -d '\n' < file
. Cependant, pour joindre toutes les lignes, c'estpaste -sd '\0' file
.tr -d '\n'
produit une sortie non textuelle car elle ne termine pas la ligne avec un caractère de nouvelle ligne.Pour supprimer, tous les caractères CR, vous pouvez faire:
Pour supprimer uniquement les caractères CR qui se trouvent à la fin des lignes:
Ou utilisez
awk
pour tout:Ou utilisez
dos2unix
(ce qui supprimerait ces CR de fin et résoudrait également certains autres problèmes avec les fichiers texte des systèmes d'exploitation Microsoft):la source