我有多个脚本可以连接到sftp服务器并放置/获取文件。最近,sftp管理员为所有登录名添加了一个较大的标头,这炸毁了我的日志文件,我想排除这一点,因为它炸毁了文件大小,并使日志有些难以读取。
照原样,这些命令具有以下格式:
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的Agains stdout和stderr重定向到日志文件。
实际上,您对从sftp重定向(stdout和stderr)都感兴趣,因此可以使用诸如以下内容:
sftp user@host <<EOF |& grep -v '^|' >> ${LOGFILE}
或者,在较旧的bash版本中,使用特定的重定向而不是速记:
sftp user@host <<EOF 2>&1 | grep -v '^|' >> ${LOGFILE}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句