次のテキストを出力するスクリプトがあります。これは、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
。次のコマンドが各改行文字をスペース文字に置き換えることを期待していました。これは、複数の行を取り、それらを1つの長い単一行に結合します。代わりに、これは出力の最後の行のみを表示します。後続の各行を次の出力行で上書きするようです。
stefanl@hosta:~/Work/Cacti $ ./script | tr '\n' ' '
Data Rate: 2880 1024stefanl@hosta:~/Work/Cacti $
stefanl@hosta:~/Work/Cacti $
更新:
さらに調べると、各行の前に改行文字が表示されているように見えます。これは^M
を使用する場合に表示されless
ます。そこで、2つのtr
ステートメントを追加しました。1つは改行文字を削除し、もう1つは復帰文字を削除します。
./script | | tr -d '\n' | tr -d '\r'
tr '\n' ' '
とtr -d '\n'
奇妙な方法で行をラップします。結果を表示するために質問を更新しました。したがって、多分私はを使用する必要がありますがtr
、それを適切に使用する方法を理解する必要があります。