shell - 我无法从 shell 脚本中的文本中删除新行(使用 sed 和 grep)
问题描述
我在 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 脚本的新手。试图将我非常有限的知识应用于新场景。任何帮助,将不胜感激。
解决方案
tr
seems to do the job and echo -n "$UPLOAD"
shows on a single line, so I think you're on the right track and only need to fix the DOWNLOAD
part.
I suggest you simplify the script a bit using something along these lines:
INPUT_FILE="~/Terminal_Projects/temp_speedtest_result.txt"
DOWNLOAD="$(grep Download $INPUT_FILE | awk '{print "↓" $2 " " $3}' | tr '\n' ' ')"
UPLOAD="$(grep Upload $INPUT_FILE | awk '{print "↓" $2 " " $3}' | tr '\n' ' ')"
echo "$DOWNLOAD | $UPLOAD"
推荐阅读
- python - 在 Windows 10 上使用 VS Code 配置 Odoo 13.0
- angular - 茉莉花测试主题。订阅
- javascript - 根据变量设置 D3 树链接的长度
- android - 图片未显示在 recyclerview 中
- date - 纪元日期转换因 apache-nifi 失败
- swift - Swift 中的 AnyObject 和泛型
- wordpress - 制作图像热点(WP)的任何想法
- python - VBA 无法在新 PC 上运行 python 脚本
- python-3.x - 我正在使用 tkinter 开发游戏。犯一个愚蠢的错误
- javascript - 在CKEditor 5上插入图像时如何获取输入alt-title