Mam skrypt, który wyświetla następujący tekst. Jest to wyjście z modemu 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
Jak mogę usunąć znak końca linii dla każdej linii? Chciałbym, aby wyjście wyglądało mniej więcej tak (tak, jest brzydkie):
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
Próbowałem takich rozwiązań, ale one nie działają:
# (This simply outputs the contents of the script, unmodified)
stefanl@hosta:~/Work/Cacti $ ./script | sed -e 's/$//'
Próbowałem też użyć tr
. Oczekiwałem, że następujące polecenie zastąpi każdy znak nowej linii spacją. To wziąłoby wiele linii i połączyłoby je w jedną długą pojedynczą linię. Zamiast tego wyświetla tylko ostatni wiersz wyniku. Wydaje się, że zastępuje każdy kolejny wiersz następnym wierszem wyniku.
stefanl@hosta:~/Work/Cacti $ ./script | tr '\n' ' '
Data Rate: 2880 1024stefanl@hosta:~/Work/Cacti $
stefanl@hosta:~/Work/Cacti $
Aktualizacja :
Po dalszym badaniu wygląda na to, że każda linia poprzedzona jest znakiem powrotu. To pokazuje, jak ^M
przy użyciu less
. Dodałem więc dwie tr
wypowiedzi. Jeden, aby usunąć znaki nowego wiersza, jeden, aby usunąć znak powrotu.
./script | | tr -d '\n' | tr -d '\r'
źródło
tr '\n' ' '
itr -d '\n'
dziwnie zawiną linię. Zaktualizowałem moje pytanie, aby pokazać wyniki. Więc może muszę użyćtr
, ale muszę tylko wymyślić, jak prawidłowo używać.tr '\n' ' '
się usunąć znak nowej linii i zastąpić go spacją, a zatem mam jedną długą linię.poza tym
tr
kilka innych metod, których możesz użyćawk
muszla
sed
źródło
Służy
tr -s '\n'
do zastępowania sekwencji powtarzających się znaków nowej linii pojedynczym wystąpieniem nowej linii.Przykład:
(patrz
man tr
)źródło
Aby usunąć znaki nowego wiersza, to
tr -d '\n' < file
. Jednak aby połączyć wszystkie linie, to jestpaste -sd '\0' file
.tr -d '\n'
generuje wyjście nietekstowe, ponieważ nie kończy jednego wiersza znakiem nowej linii.Aby usunąć wszystkie znaki CR, możesz:
Aby usunąć tylko znaki CR znajdujące się na końcu linii:
Lub użyj
awk
do wszystkiego:Lub użyj
dos2unix
(który usunąłby te końcowe CR, a także naprawił niektóre inne problemy z plikami tekstowymi z systemów operacyjnych Microsoft):źródło