다음 텍스트를 출력하는 스크립트가 있습니다. 이것은 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
각 줄의 줄 끝 문자를 어떻게 제거합니까? 출력이 다음과 같이 보이기를 원합니다 (예 : 추악합니다).
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
나는 이와 같은 해결책을 시도했지만 작동하지 않습니다.
# (This simply outputs the contents of the script, unmodified)
stefanl@hosta:~/Work/Cacti $ ./script | sed -e 's/$//'
나는 또한 사용하려고했다 tr
. 각 줄 바꿈 문자를 공백 문자로 바꾸려면 다음 명령이 필요했습니다. 이것은 여러 줄을 가져 와서 하나의 긴 단일 줄로 결합합니다. 대신, 이것은 마지막 출력 라인 만 표시합니다. 각 후속 줄을 다음 출력 줄로 덮어 쓰는 것 같습니다.
stefanl@hosta:~/Work/Cacti $ ./script | tr '\n' ' '
Data Rate: 2880 1024stefanl@hosta:~/Work/Cacti $
stefanl@hosta:~/Work/Cacti $
업데이트 :
추가 검사를 수행하면 각 줄 앞에 리턴 문자가있는 것처럼 보입니다. 를 ^M
사용할 때 나타납니다 less
. 그래서 나는 두 가지 tr
진술을 추가했습니다 . 하나는 개행 문자를 삭제하고 다른 하나는 리턴 문자를 삭제합니다.
./script | | tr -d '\n' | tr -d '\r'
답변
sed
한 번에 한 줄씩 작동하기 때문에 (쉽게) 작동하지 않습니다. 할 수 있지만 전체 입력을 보류 버퍼에 복사해야합니다.
tr
실제로 붙여 넣은 방식으로 작동해야합니다. 줄 바꿈이 확실 \n
합니까? 줄 바꿈을 공백으로 변환하는 대신 삭제하여 조금 단순화 할 수 있습니다.
tr -d '\n'
답변
게다가 tr
, 당신이 사용할 수있는 다른 방법들
어 wk
awk '1' ORS= file
껍질
while read -r line; do printf "%s " "$line"; done <file
sed
sed -e ':a' -e 'N;s/\n/ /;ba' file
답변
tr -s '\n'
반복되는 개행 문자 시퀀스를 한 번의 개행으로 대체하는 데 사용하십시오 .
예:
>>> echo -e "Squeeze\n\n\nthose\n\n\n\nnewlines\n"
Squeeze
those
newlines
2z [franck:~] $
>>> echo -e "Squeeze\n\n\nthose\n\n\n\nnewlines\n" | tr -s '\n'
Squeeze
those
newlines
(참조 man tr
)
답변
개행 문자를 제거하려면 tr -d '\n' < file
입니다. 그러나 모든 라인에 참여하려면 paste -sd '\0' file
.
tr -d '\n'
줄 바꿈 문자로 한 줄을 끝내지 않으므로 텍스트가 아닌 출력을 생성합니다.
모든 CR 문자를 제거하려면 다음을 수행하십시오.
tr -d '\r' < file | paste -sd '\0' -
행 끝에있는 CR 문자 만 제거하려면 다음을 수행하십시오.
CR=$(printf '\r')
sed "s/$CR\$//" < file | paste -sd '\0' -
또는 awk
모든 용도로 사용하십시오 .
awk '{gsub(/\r$/, ""); printf "%s", $0}
END {if (NR) print ""}' < file
또는 사용하십시오 dos2unix
(마지막 CR을 제거하고 Microsoft OS의 텍스트 파일과 관련된 다른 문제도 해결합니다).
dos2unix < file | paste -sd '\0' -