我有一个跟踪 AWS CloudWatch 日志的流程。它运行良好,只是每行前面都添加了 CloudWatch 组和容器 ID。例如:
core-api 04a7ce3daf83aa018a92eb4a613c87354695dc8219f213697f7f786b81d4d [PROD] - INFO: GET 200 - 5ms core-api 04a7ce3daf83aa018a92eb4a613c87354695dc8219f213697f7f786b81d4d [PROD] - INFO: POST 200 - 7ms
有没有办法将我使用的日志命令与某种类型的过滤器一起传输,以便仅显示之后的行信息[PROD] -
?
答案1
您可以尝试使用cut
剪切出您感兴趣的列。
tail -f whatever | cut -d ' ' -f 3-
[PROD] - INFO: GET 200 - 5ms
[PROD] - INFO: POST 200 - 7ms
这-d
将设置空格作为字段分隔符,并-f
指定仅显示第三个及后续字段。
指定字段也会变得更加复杂。假设您只想删除那个令人讨厌的无用第二个字段。那么您可以指定-f 1,3-
。
core-api [PROD] - INFO: GET 200 - 5ms
core-api [PROD] - INFO: POST 200 - 7ms
请参阅cut
手册页以了解使用此命令可以执行的更多操作。
答案2
您可以尝试使用 awk。如果所有行都以 4 个字段开头,则
...| awk '{$1=$2=$3=$4=""; print $0}'
但您可能需要明确刷新输出
...| awk '{$1=$2=$3=$4=""; print $0; fflush() }'
这基本上会使前 4 个字段为空。请注意,如果您随后只想打印某些字段,则第一个字段仍为 $5,但我想如果您想这样做,您首先就不需要使这些字段为空。
如果字段数量可变,并且它们总是以 结尾,[PROD] -
那么您可以使用 sed
...| sed s '/^.* \[PROD\] -//'
它基本上将从行首到行末的所有内容替换-
为 null //
。