Tengo un script que genera el siguiente texto. Esta es la salida de un módem ADSL2 Netopia 2210-02 .
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
¿Cómo puedo eliminar el carácter de fin de línea para cada línea? Me gustaría que la salida se vea así (Sí, es feo):
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
Intenté algunas soluciones como esta, pero no funcionan:
# (This simply outputs the contents of the script, unmodified)
stefanl@hosta:~/Work/Cacti $ ./script | sed -e 's/$//'
También intenté usar tr
. Esperaba que el siguiente comando reemplazara cada carácter de nueva línea con el carácter de espacio. Esto tomaría las líneas múltiples y las combinaría en una sola línea larga. En cambio, esto solo muestra la última línea de salida. Parece sobrescribir cada línea posterior con la siguiente línea de salida.
stefanl@hosta:~/Work/Cacti $ ./script | tr '\n' ' '
Data Rate: 2880 1024stefanl@hosta:~/Work/Cacti $
stefanl@hosta:~/Work/Cacti $
Actualización :
Tras un examen más detallado, parece que cada línea está precedida por un carácter de retorno. Esto aparece como ^M
cuando se usa less
. Entonces, agregué dos tr
declaraciones. Uno para eliminar caracteres de nueva línea, uno para eliminar el carácter de retorno.
./script | | tr -d '\n' | tr -d '\r'
fuente
tr '\n' ' '
ytr -d '\n'
envolverán la línea de una manera extraña. Actualicé mi pregunta para mostrar los resultados. Entonces, tal vez necesito usarlotr
, pero solo necesito descubrir cómo usarlo correctamente.tr '\n' ' '
eliminar el carácter de nueva línea y reemplazarlo con un carácter de espacio, y por lo tanto tener una línea larga.además
tr
, algunos otros métodos que puedes usarawk
cáscara
sed
fuente
Se usa
tr -s '\n'
para reemplazar secuencias de caracteres de nueva línea repetidos con una sola aparición de nueva línea.Ejemplo:
(ver
man tr
)fuente
Para eliminar caracteres de nueva línea, es
tr -d '\n' < file
. Sin embargo, para unir todas las líneas, eso espaste -sd '\0' file
.tr -d '\n'
produce una salida sin texto ya que no termina la línea con un carácter de nueva línea.Para eliminar, todos los caracteres CR, puede hacer:
Para eliminar solo los caracteres CR que están al final de las líneas:
O úsalo
awk
para todo:O use
dos2unix
(que eliminaría los CR finales y también solucionaría otros problemas con los archivos de texto de los sistemas operativos de Microsoft):fuente