如何自定义重定向stderr?忽略前两个字符写入文件
解决方案:重定向stderr并过滤前两个字符
下面提供两种符合要求的单命令行实现方式,无需重新编译程序或编写额外辅助脚本:
方法1:兼容多数POSIX Shell的管道方案
./my-C-binary 2>&1 >/dev/null | sed 's/^..//' > error.log
逻辑解释:
2>&1:将标准错误流(文件描述符2)重定向到标准输出流(文件描述符1)>/dev/null:丢弃原程序的标准输出内容,确保管道中仅传递标准错误数据sed 's/^..//':通过sed正则替换,移除每一行开头的两个字符> error.log:将过滤后的最终内容写入目标日志文件
方法2:现代Shell(bash/zsh等)专属的进程替换方案
./my-C-binary 2> >(sed 's/^..//' > error.log)
逻辑解释:
2> >(...):利用bash的进程替换特性,直接将标准错误流导向括号内的处理进程- 括号内的
sed 's/^..//' > error.log会实时处理输入的错误输出,移除每行前两个字符后写入日志文件 - 该方式无需额外处理标准输出,语法更简洁直观
验证说明
若原程序stderr输出为:
The quick brown fox jumps over the lazy dog.
经过上述命令处理后,error.log中会保存:
e quick brown fox jumps over the lazy dog.
内容的提问来源于stack exchange,提问作者FatArmpit
相关产品推荐
相关产品推荐

