从日志文件的 sftp 连接中排除特定行
Exclude specific lines from sftp connection from logfile
我有多个脚本可以连接到 sftp 服务器和 put/get 文件。最近 sftp 管理员为所有登录添加了一个大 header,这已经炸毁了我的日志文件,我想排除它,因为它会炸毁文件大小并使日志有些不可读。
照原样,命令格式如下:
sftp user@host <<EOF &>> ${LOGFILE}
get ...
put ...
exit
EOF
现在,我已经尝试找出所有以管道开头的新行(他们基本上制作了一个盒子来放入它们)。
sftp user@host <<EOF | grep -v '^|' &>> ${LOGFILE}
get ...
put ...
exit
EOF
这排除了 ${LOGFILE}
中的行,但将它们扔到 stdout
中,这意味着它们最终出现在另一个日志文件中,我们也不希望它们出现(这些脚本由调度器)。奇怪的是,它似乎也从连接尝试输出中过滤掉了第一行。
Connecting to <host>...
并将其重定向到 stdout
。不是世界末日,但我确实觉得很奇怪。
如何过滤以 |
开头的行,使它们不显示在任何地方?
在
sftp user@host <<EOF &>> ${LOGFILE}
您正在将 stdout 和 stderr 重定向到日志文件以附加数据 (&>>)。但是当你使用
sftp user@host <<EOF | grep -v '^|' &>> ${LOGFILE}
您只是将 stdout 重定向到 grep,让 sftp 的 stderr 输出保持原样。最后,您再次将 grep 的 stdout 和 stderr 重定向到日志文件。
事实上,您有兴趣从 sftp 重定向两者(stdout 和 stderr),因此您可以使用类似的东西:
sftp user@host <<EOF |& grep -v '^|' >> ${LOGFILE}
或者,在旧版本的 bash 中,使用特定的重定向而不是 shorthand:
sftp user@host <<EOF 2>&1 | grep -v '^|' >> ${LOGFILE}
我有多个脚本可以连接到 sftp 服务器和 put/get 文件。最近 sftp 管理员为所有登录添加了一个大 header,这已经炸毁了我的日志文件,我想排除它,因为它会炸毁文件大小并使日志有些不可读。
照原样,命令格式如下:
sftp user@host <<EOF &>> ${LOGFILE}
get ...
put ...
exit
EOF
现在,我已经尝试找出所有以管道开头的新行(他们基本上制作了一个盒子来放入它们)。
sftp user@host <<EOF | grep -v '^|' &>> ${LOGFILE}
get ...
put ...
exit
EOF
这排除了 ${LOGFILE}
中的行,但将它们扔到 stdout
中,这意味着它们最终出现在另一个日志文件中,我们也不希望它们出现(这些脚本由调度器)。奇怪的是,它似乎也从连接尝试输出中过滤掉了第一行。
Connecting to <host>...
并将其重定向到 stdout
。不是世界末日,但我确实觉得很奇怪。
如何过滤以 |
开头的行,使它们不显示在任何地方?
在
sftp user@host <<EOF &>> ${LOGFILE}
您正在将 stdout 和 stderr 重定向到日志文件以附加数据 (&>>)。但是当你使用
sftp user@host <<EOF | grep -v '^|' &>> ${LOGFILE}
您只是将 stdout 重定向到 grep,让 sftp 的 stderr 输出保持原样。最后,您再次将 grep 的 stdout 和 stderr 重定向到日志文件。
事实上,您有兴趣从 sftp 重定向两者(stdout 和 stderr),因此您可以使用类似的东西:
sftp user@host <<EOF |& grep -v '^|' >> ${LOGFILE}
或者,在旧版本的 bash 中,使用特定的重定向而不是 shorthand:
sftp user@host <<EOF 2>&1 | grep -v '^|' >> ${LOGFILE}