You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对命令输出执行sed提取操作同时不抑制全部原有输出

可行的两种实现方案

方案1:实时输出全部内容

利用tee把脚本输出复制一份输出到终端,同时不影响匹配提取,适合需要实时看到脚本执行输出的场景:

word123=$(./test.sh | tee /dev/stderr | sed -nr 's/Hello world (.*)/\1/p')

运行后你会直接在终端看到test.sh的全部输出,同时变量word123会被正确赋值为123。原理是tee将收到的所有内容同时写入到指定的/dev/stderr(标准错误流,默认会直接输出到终端,不会被$()的命令替换捕获)和后续的sed管道中。

方案2:先缓存全量输出再处理

兼容性更强,不存在系统对/dev/stderr的权限限制问题,适合不需要实时输出的场景:

# 先将脚本的全部输出存入变量
full_output=$(./test.sh)
# 手动输出全部内容
echo "$full_output"
# 从缓存的输出中提取匹配内容
word123=$(sed -nr 's/Hello world (.*)/\1/p' <<< "$full_output")

这个方案会等test.sh执行完成后再一次性输出所有内容,变量提取逻辑和你原来的写法完全一致。

内容的提问来源于stack exchange,提问作者jipot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 10:54:03