標準出力から行末文字を削除しますか?複数行を1行にマージ

標準出力から行末文字を削除しますか?複数行を1行にマージ

次のテキストを出力するスクリプトがあります。これは出力です。ネトピア 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つの長い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'

ベストアンサー1

sed一度に 1 行だけ実行するので (簡単に) 動作しませんが、それを行うには、入力全体を保持バッファにコピーする必要があります。

tr実際に貼り付けた方法で動作します。改行が\nsかどうかわかりますか?改行を空白に変換するのではなく、削除して単純化できます。

tr -d '\n'

おすすめ記事