【问题标题】:'cat file' stdout differs from 'cat file > textfile'“cat 文件”标准输出不同于“cat 文件 > 文本文件”
【发布时间】:2019-04-17 18:39:22
【问题描述】:

当我 cat 我的 aws 备份数据(与 $(aws s3 sync >> logfile) 一起收集)时,当我 'cat' 文件时数据看起来不错,但是如果我 'grep yada yada|sed yada yada backup.log > newfile ',然后通过管道将其发送到 'mail' 或使用 'vi' 查看它,它现在在标准输出中显示了额外的字符。示例:

[猫到标准输出]

$ cat aws.tail.log
Starting aws backup Wed Apr 17 00:01:01 EDT 2019

upload: zim/Beer/.zim/state.conf to s3://...
upload: Documents/testfile to s3://...



Completed  aws backup Wed Apr 17 00:01:52 EDT 2019

[cat 重定向到文件]

$ cat aws.tail.log > aws.email.txt
$ vi aws.email.txt  

here's what I see in vi:

Starting aws backup Wed Apr 17 00:01:01 EDT 2019
Completed 0 file(s) with ~0 file(s) remaining (calculating...)^M                                                              
Completed 2.5 KiB/~225.5 KiB (14.8 KiB/s) with ~3 file(s) remaining (calculating...)^Mupload: zim/Beer/.zim/state.conf to s3://
Completed 2.5 KiB/~225.5 KiB (14.8 KiB/s) with ~2 file(s) remaining (calculating...)^MCompleted 3.5 KiB/~225.5 KiB (3.5 KiB/s) with ~2 file(s) remaining (calculating...) ^Mupload: zim/Beer/h
ouse/tech/sterling/notifications.txt to s3://
Completed 226.1 KiB/~226.1 KiB (70.3 KiB/s) with ~0 file(s) remaining (calculating...)^M                                                                                      
Completed 0 file(s) with ~0 file(s) remaining (calculating...)^MCompleted 0 file(s) with ~0 file(s) remaining (calculating...)^MCompleted 0 file(s) with ~0 file(s) remaining (calculating...)
^MCompleted 0 file(s) with ~0 file(s) remaining (calculating...)^MCompleted 0 file(s) with ~0 file(s) remaining (calculating...)^MCompleted 0 file(s) with ~0 file(s) remaining (calculating..
.)^MCompleted 0 file(s) with ~0 file(s) remaining (calculating...)^MCompleted 0 file(s) with ~0 file(s) remaining (calculating...)^MCompleted 0 file(s) with ~0 file(s) remaining (calculating
...)^MCompleted 0 file(s) with ~0 file(s) remaining (calculating...)^M

当我使用 $(cat daily_stats.txt |mail -s "subject" $EMAIL) 发送电子邮件或也使用 $(mail -s "subject" $EMAIL 发送电子邮件时,这也会显示在电子邮件正文中

我已经尝试过滤掉 ^M 字符,但它只能这样做。也试过: sed -r "s/\x1B[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" 和 perl -p -e 's/\r//g'

还有多余的行(已完成 0 个文件,剩余约 0 个文件(正在计算...)^M)

有人知道如何将我从“猫”看到的标准输出转换为电子邮件或文本文件,而不需要额外的爵士乐吗?

谢谢!

【问题讨论】:

  • 没有很好的方法可以做到这一点。您应该首先禁用aws s3 sync 中的进度和格式,例如与 --no-progress 和/或 --color off 。当 stdout 是一个文件时它不会自动执行此操作这一事实是他们方面的一个错误

标签: linux email redirect cat


【解决方案1】:

这应该可行:

cat aws.tail.log | col -b > aws.email.txt

我建议针对编写此日志的工具提交一个关于自动检测非终端和不使用控制字符的错误。

【讨论】:

    猜你喜欢
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 2014-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多