有没有办法在重定向到文件之前过滤标准输出(或标准错误)?“重定向到管道”可能不是最好的表达方式,但我正在寻找实现这种效果的最简单方法。
使用场景如下。我原则上使用 gawk --lint-invalid 来检测我的脚本中可能存在的错误,并希望过滤掉虚假的错误。我希望在写入文件之前进行过滤,而不是将错误重定向到文件并在检查文件时将它们删除。
示例:此脚本每隔一行打印一次到 stderr。
echo -ne 'a\nb\nc\nd\n' | gawk --lint=invalid 'BEGIN {b = 1;} // {if (b) print; else print > "/dev/stderr"; b = !b;}' 1>/dev/null 2>errors
cat errors | less
gawk: warning: regexp constant `//' looks like a C++ comment, but is not
b
d
gawk: (FILENAME=- FNR=4) warning: no explicit close of file `/dev/stderr' provided
但是你可以看到虚假的 gawk 警告(它们并不重要)。例如,它们可以被过滤,使用
filter-gawk-output.sh
---------------------
grep -Ev 'looks like a|explicit close'
重定向到错误文件时,是否有一种优雅的方式来内联?现在在检查错误文件时,我总是这样做
cat errors | ./filter-gawk-output.sh | less