bash - 将 grep STDERR 过滤的重定向到文件
问题描述
这篇文章http://burgerbum.com/stderr_pipe.html解释了如何 grep STDERR,过滤后的结果在屏幕上回显。
示例:归档程序 tar 在 STDERR 上产生大量错误消息,其中一些很重要,而另一些可以忽略。我们只想看到那些表明确实有问题的人。
tar -cf /tmp/junk.tar /tmp/real /tmp/fake
tar: Removing leading `/' from member names
tar: /tmp/fake: Cannot stat: No such file or directory
tar: Error exit delayed from previous errors
为了从 STDERR 中删除tar: Removing leading '/' from member names
和tar: Error exit delayed from previous errors
离开tar: /tmp/fake: Cannot stat: No such file or directory
,作者建议如下:
(tar -cf /tmp/junk.tar /tmp/real /tmp/fake 3>&1 1>&2 2>&3 | egrep -v "tar: Removing leading|tar: Error exit delayed from previous errors") 3>&1 1>&2 2>&3
唯一的 STDERR 输出将是:tar: /tmp/fake: Cannot stat: No such file or directory
问题:如何实现相同的结果,而不是回显 => 写入文件?
我使用了 tar 示例,因为它是本文原生的。
但我的真实情况是mysqldump
,它生成 STDOUT(我不想弄乱),并且还生成 STDERR - 我需要过滤并写入文件。
mysqldump --user=db_username --password=db_password --add-drop-database --host=db_host db_name 2>> '/srv/www/data_appsrv/logs/mysql_date_ym.log' > '/mnt/backup_srv/PFTLXTKDEV/backup/daily/file_nm_db'
我需要Warning: Using a password
从写入的 STDERR 中排除字符串mysql_date_ym.log
我尝试了 and 的变体2>>
,>
但没有一个有效。
解决方案
在 bash 中,只需:
tar ... 2> >(egrep -v ... >&2)
或归档:
tar ... 2> >(egrep -v ... >the_file.txt )
我认为用 2 个描述符切换 1 没有任何价值,只需使用第 3 个描述符,它已经存在了。
( tar ... 2>&1 1>&3 | egrep -v ... ) 3>&1 1>&2
或者您似乎想将egrep
输出重定向到文件。然后这样做:
( tar ... 2>&1 1>&3 | egrep ... >thefile.txt ) 3>&1
# or
( tar ... 2>&1 1>&3 | egrep ... ) 3>&1 1>thefile.txt
# or just
( tar ... 2>&1 1>&3 | egrep ... ) 3>&1 >thefile.txt
或通过该切换:
( tar ... 3>&1 1>&2 2>&3 | egrep ... ) 3>&1 1>thefile.txt 2>&3
( tar ... 3>&1 1>&2 2>&3 | egrep ... >thefile.txt ) 3>&1 2>&3
# it's just:
( tar ... 3>&1 1>&2 2>&3 | egrep ... >thefile.txt ) 2>&1
推荐阅读
- keras - Tensorflowjs:如何判断keras模型转换成什么格式
- jquery - 如何从使用 Bootstrap 文件输入选择的文件中获取 Base64 字符串并使用 AJAX 提交字符串?
- python - Flask Sqlalchmey - Marshmallow Nested Schema 对于带有过滤器( where )条件的连接失败
- mysql - 如何以正确的方式转换系统模式`mysql`的字符集?
- python - 计算多列并在行中转置列 - PYTHON
- css - CSS Grid 中的行数有限制吗?
- python - python-gerrit-api 替代身份验证
- r - 为什么向量'c'的值没有在循环中更新?
- node.js - 必须提供 HTTP 标头“授权”或 URL 参数“授权”
- python - 如何在我的 python 脚本运行时阻止 Linux 将关键输入写入终端?