Bash 从日志文件中排除sftp连接中的特定行

Bash 从日志文件中排除sftp连接中的特定行,bash,sftp,gnu,Bash,Sftp,Gnu,我有多个脚本连接到sftp服务器并放置/获取文件。最近,sftp管理员为所有登录添加了一个大的头,这破坏了我的日志文件,我想排除它,因为它破坏了文件大小,并且使日志有些不可读 按原样,命令的格式如下: sftp user@host <<EOF &>> ${LOGFILE} get ... put ... exit EOF 并将其重定向到stdout。不是世界末日,但我确实觉得很奇怪 如何过滤以|开头的行,使它们不会显示在任何地方 In sftp user@hos

我有多个脚本连接到sftp服务器并放置/获取文件。最近,sftp管理员为所有登录添加了一个大的头,这破坏了我的日志文件,我想排除它,因为它破坏了文件大小,并且使日志有些不可读

按原样,命令的格式如下:

sftp user@host <<EOF &>> ${LOGFILE}
get ...
put ...
exit
EOF
并将其重定向到
stdout
。不是世界末日,但我确实觉得很奇怪

如何过滤以
|
开头的行,使它们不会显示在任何地方

In

sftp user@host <<EOF &>> ${LOGFILE}
sftpuser@host${LOGFILE}
您正在将stdout和stderr重定向到日志文件以附加数据(&>>)。但是当你使用

sftp user@host <<EOF | grep -v '^|' &>> ${LOGFILE}
sftpuser@host${LOGFILE}
您只是将stdout重定向到grep,让sftp的stderr输出原封不动地通过。最后,您将agains stdout和grep的stderr重定向到日志文件

事实上,您对从sftp重定向(stdout和stderr)很感兴趣,因此您可以使用如下内容:

sftp user@host <<EOF |& grep -v '^|' >> ${LOGFILE}
sftpuser@host${LOGFILE}
或者,在较旧版本的bash中,使用特定重定向而不是速记:

sftp user@host <<EOF 2>&1 | grep -v '^|' >> ${LOGFILE}
sftpuser@host>${LOGFILE}
sftp user@host <<EOF |& grep -v '^|' >> ${LOGFILE}
sftp user@host <<EOF 2>&1 | grep -v '^|' >> ${LOGFILE}