xargs 对引号的过滤是重点。
修复数据的一种方式。把access日志中的参数重新 curl。我们框架的access日志是json格式的。(可能你想通过nginx的access去修复,那下面命令就不太适合,需要做更多的工作了)。
我们的框架(用的swoole)中的日志格式大致如下。
{
"datetime":"2019-08-26T11:35:22.675+0800",
"env":"dev",
"log_type":"access",
"log_level":"NOTICE",
"app_name":"api-v2",
"uri":"/",
"status":1,
"client_id":"",
"device_id":"",
"x_sqkb_trace_id":"",
"x_forwarded_for":"",
"http_code":"200",
"ms":"0.087976455688477"
}
有同学说使用xargs的时候引号被过滤了。那接口收到的数据自然就不是正确的json。这时候需要对引号进行转义。所以用sed -e 's/"/\\"/g'
那么命令如下
cat xxx_access_20190824.log | sed -e 's/"/\\"/g'| xargs -n1 curl -X POST localhost:xxx/v2/api/xxx -H 'Content-Type: application/json' -d</pre>
参考链接:
*《Why does xargs strip quotes from input?》https://unix.stackexchange.com/questions/38148/why-does-xargs-strip-quotes-from-input
网友评论