该 sed 命令用途 s!pattern!replacement!g 执行全局搜索和替换。搜索模式 /(users|geo|places)/[0-9]+ 火柴 /users/ , /geo/ , 要么 /places/ 接下来是一个数字。替换字符串 /\1/# 将原始单词保留在原位,并将数字更改为 # 。
sed
s!pattern!replacement!g
/(users|geo|places)/[0-9]+
/users/
/geo/
/places/
/\1/#
#
$ awk '/^\[/ {print $3,$4,$6}' test.log | sed -r 's!/(users|geo|places)/[0-9]+!/\1/#!g' | sort | uniq -c 1 GET /cgi-bin/try/ 200 1 GET /hidden/ 404 1 GET /users/#/geo/ 504 4 GET /users/#/places/ 202 1 POST /geo/#/places/#/ 202 2 POST /hidden/ 404 1 POST /users/#/places/ 202 1 PUT /cgi-bin/try/ 200 3 PUT /geo/#/places/#/ 202 1 PUT /users/#/geo/ 504
如果你想要你可以使用的确切输出格式 column 将数据对齐到整齐的列。
column
$ awk '/^\[/ {print $3,$4,$6}' test.log | sed -r 's!/(users|geo|places)/[0-9]+!/\1/#!g' | sort | uniq -c | { echo 'verb uri status count'; awk '{print $2,$3,$4,$1}' } | column -t verb uri status count GET /cgi-bin/try/ 200 1 GET /hidden/ 404 1 GET /users/#/geo/ 504 1 GET /users/#/places/ 202 4 POST /geo/#/places/#/ 202 1 POST /hidden/ 404 2 POST /users/#/places/ 202 1 PUT /cgi-bin/try/ 200 1 PUT /geo/#/places/#/ 202 3 PUT /users/#/geo/ 504 1