Ste*_*ski 16 shell shell-script
我有一个输出以下文本的脚本。这是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
Run Code Online (Sandbox Code Playgroud)
如何删除每行的行尾字符?我希望输出看起来像这样(是的,它很丑):
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
Run Code Online (Sandbox Code Playgroud)
我尝试了一些这样的解决方案,但它们不起作用:
# (This simply outputs the contents of the script, unmodified)
stefanl@hosta:~/Work/Cacti $ ./script | sed -e 's/$//'
Run Code Online (Sandbox Code Playgroud)
我也尝试使用tr
. 我期待以下命令用空格字符替换每个换行符。这将采用多行并将它们组合成一个长的单行。相反,这仅显示输出的最后一行。它似乎用下一行输出覆盖了每个后续行。
stefanl@hosta:~/Work/Cacti $ ./script | tr '\n' ' '
Data Rate: 2880 1024stefanl@hosta:~/Work/Cacti $
stefanl@hosta:~/Work/Cacti $
Run Code Online (Sandbox Code Playgroud)
更新:
经过进一步检查,看起来每一行前面都有一个返回字符。这显示为^M
使用less
. 所以,我添加了两个tr
语句。一是删除换行符,一是删除回车符。
./script | | tr -d '\n' | tr -d '\r'
Run Code Online (Sandbox Code Playgroud)
Mic*_*zek 21
sed
不会(很容易)工作,因为它一次只在一行上运行;你可以这样做,但它会涉及将整个输入复制到保持缓冲区中
tr
实际上应该按照您粘贴的方式工作;你确定换行符是\n
s 吗?您可以通过删除换行符而不是将它们转换为空格来简化它:
tr -d '\n'
Run Code Online (Sandbox Code Playgroud)
此外tr
,您还可以使用其他一些方法
awk
awk '1' ORS= file
Run Code Online (Sandbox Code Playgroud)
贝壳
while read -r line; do printf "%s " "$line"; done <file
Run Code Online (Sandbox Code Playgroud)
sed
sed -e ':a' -e 'N;s/\n/ /;ba' file
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
33611 次 |
最近记录: |