【发布时间】:2023-12-28 01:05:01
【问题描述】:
我在 macOS 上使用 zsh
我有一个 shell 脚本,它生成一个带有 speedtest 结果的文本文件,布局如下:
Download: 63.57 Mbps (data used: 69.3 MB)
Upload: 16.11 Mbps (data used: 23.0 MB)
我可以操纵布局并产生这个:
↓ 63.57 Mbps |
↑ 16.11 Mbps
注意第一行文本之前的换行符和管道之后的换行符。在终端中只打印出最后一行:↑ 16.11 Mbps
转换输入的脚本是这样的:
DOWNLOAD=$(cat ~/Terminal_Projects/temp_speedtest_result.txt | grep Download | sed 's/ Download: /↓ /g' | sed 's/ (data used: //g' | sed -E 's/[0-9]{1,4}\.[0-9] MB)//g' | sed 's/\n\r\t//')
UPLOAD=$(cat ~/Terminal_Projects/temp_speedtest_result.txt | grep Upload | sed 's/ Upload: /↑ /g' | sed 's/ (data used: //g' | sed -E 's/[0-9]{1,4}\.[0-9] MB)//g' | tr '\n' ' ')
RESULT=$DOWNLOAD" | "$UPLOAD
echo $RESULT
我使用了多个 sed 实例,因为我无法让它在一个实例中工作。你可能知道如何让它工作。
我想要做的是在一行上输出 DOWNLOAD 和 UPLOAD 变量。我有另一个非常相似的脚本,它通过完全相同的变量操作来实现。
我尝试过的:
使用 RESULT="$DOWNLOAD | $UPLOAD"
使用 RESULT="${DOWNLOAD} | ${UPLOAD}"
使用tr '\n' ' '代替sed命令删除\n
如果不支持这些符号,我尝试删除向上和向下箭头 - 相同的行为。
我尝试在 RESULT 变量上使用 sed 来尝试删除新行。我还尝试将 RESULT 变量的内容写入一个新的临时 txt 文件,然后检索文件的内容并使用 grep 逐一提取结果,希望不会复制新行。没有为我工作。 看起来有我无法删除的换行符,但我可能是错的。
我是命令行和 shell 脚本的新手。试图将我非常有限的知识应用于新场景。任何帮助将不胜感激。
【问题讨论】:
-
如果输入文件中有多个
Download或Upload行,您希望它是什么样子?还是保证永远不会发生?
标签: shell unix terminal command-line-interface zsh