在将它与 stdout 一起写入文件之前编辑 stderr
Edit stderr before writing it to file together with stdout
我经历了很多 SO 问题,但到目前为止,我找不到能解决我的特定问题的问题。
我使用 GNU 日期将日期转换为纪元时间:
date -f created_at +%s > created_at_epoch
为了捕获像 "date: invalid date ‘...’" 这样的错误消息,我将 stderr 重定向到 stdout:
date -f created_at +%s 2>&1 > created_at_epoch
现在,我想将错误消息更改为类似 "NA" 的内容。我尝试了进程替换,但这似乎不起作用。输出中行的顺序已更改,过程未完成。
date -f created_at +%s 2> >(sed s/^date.*/NA/ >&1) > created_at_epoch
如果有任何关于如何解决此问题的建议,我将非常高兴,我对此一无所知。
您可以先将标准错误重定向到标准输出,然后再操作组合流:
date -f created_at +%s |& sed '/date/s/.*/NA/' > created_at_epoch
|&
是 Bash shorthand 对于 2>&1 |
。
通常我会使用您尝试过的进程替换方法,但我不会在这里使用,因为您关心输出顺序并且通常不能保证 stdout 和 stderr 会正确混合。您不想依赖它们进行行缓冲和定期刷新。
最好自己单独处理每一行。这样您就可以准确控制错误日期的处理方式。作为奖励,您可以完全抑制 stderr 并关闭 date
的退出代码。
while IFS= read -r date; do
date -d "$date" +%s 2>/dev/null || echo "N/A"
done <created_at >created_at_epoch
我经历了很多 SO 问题,但到目前为止,我找不到能解决我的特定问题的问题。
我使用 GNU 日期将日期转换为纪元时间:
date -f created_at +%s > created_at_epoch
为了捕获像 "date: invalid date ‘...’" 这样的错误消息,我将 stderr 重定向到 stdout:
date -f created_at +%s 2>&1 > created_at_epoch
现在,我想将错误消息更改为类似 "NA" 的内容。我尝试了进程替换,但这似乎不起作用。输出中行的顺序已更改,过程未完成。
date -f created_at +%s 2> >(sed s/^date.*/NA/ >&1) > created_at_epoch
如果有任何关于如何解决此问题的建议,我将非常高兴,我对此一无所知。
您可以先将标准错误重定向到标准输出,然后再操作组合流:
date -f created_at +%s |& sed '/date/s/.*/NA/' > created_at_epoch
|&
是 Bash shorthand 对于 2>&1 |
。
通常我会使用您尝试过的进程替换方法,但我不会在这里使用,因为您关心输出顺序并且通常不能保证 stdout 和 stderr 会正确混合。您不想依赖它们进行行缓冲和定期刷新。
最好自己单独处理每一行。这样您就可以准确控制错误日期的处理方式。作为奖励,您可以完全抑制 stderr 并关闭 date
的退出代码。
while IFS= read -r date; do
date -d "$date" +%s 2>/dev/null || echo "N/A"
done <created_at >created_at_epoch