regex - Awk,仅打印与正则表达式匹配的模式

标签 regex linux bash awk grep

  • 例如,我有以下字符串:

  •  10.1.2.194 (197.84.211.148) - - [08/Oct/2015:09:01:44 +0000] "GET /merlin-web-za/web/images/refinements/loader.gif HTTP/1.1" 200 4178 0 1868 "http://www.autotrader.co.za/makemodel/make/chevrolet/model/aveo/caryearrangeszar/2012/search?sort=PriceAsc&locationName=Cape%20Town&latitude=-33.92584&longitude=18.42322&county=Western%20Cape" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36" "ajp://10.1.4.66:8009"
    

    我需要在以下位置进行修改:

    08/Oct/2015:09:01:44 GET /merlin-web-za/web/images/refinements/loader
    

    我该如何使用awk或egrep?
    -我在下面尝试了命令,但是第一个命令的结果显示了包含两个跟随模式的完整字符串

    awk ' /08/Oct/2015:09:[0-9]{2}:[0-9]{1,2}/ && /GET (/[a-z0-9-]{1,}){1,3}/'
    



    cat file | egrep -o "08/Oct/2015:09:[0-9]{2}:[0-9]{1,}.* GET (/[a-z0-9-]{1,}){1,}"
    

    填补了上述模式之间的空白,结果我可以看到:

    08/Oct/2015:09:01:44 +0000] "GET /merlin-web-za/web/images/refinements/loader
    

    那不是我想要得到的

    最佳答案

    您可以使用

    awk '{a=$5" "$7" "$8; gsub(/[]["]|\.[^.]*$/, "", a); print a}'
    

    online demo

    详细信息

    默认的字段分隔符-空白-用于将行拆分为多个字段。
  • a=$5" "$7" "$8;-通过将字段5、7和8与空格
  • 连接起来来创建变量
  • gsub(/[]["]|\.[^.]*$/, "", a)-删除
  • 字符串末尾的[]". + .以外的任何0+个字符
  • print a-打印结果。

  • 但是,您发送给我的文件的第一个括号中包含用逗号和空格分隔的IP地址。您可以使用
    sed -E -n 's/^[^][]*\[([^][[:space:]]+)[^][]*\][ \t]+"([[:alpha:]]+[ \t]+[^[:space:]]+).*/\1 \2/p' access_log > newfile
    

    获得所需的结果,即time + Get/post +URL

    详细信息
  • ^-匹配字符串
  • 的开头
  • [^][]*-[]以外的任何0个或更多字符
  • \[-一个[ char
  • ([^][[:space:]]+)-组1:除][和空格
  • 以外的其他1个字符
  • [^][]*-[]以外的任何0个或更多字符
  • \]-一个] char
  • [ \t]+-1+水平空格字符
  • "-一个" char
  • ([[:alpha:]]+[ \t]+[^[:space:]]+)-组2:1+个字母,1+水平空格,然后是除空格
  • 以外的1+个字符
  • .*-字符串的其余部分。

  • 结果是组1和2值的串联。

    关于regex - Awk,仅打印与正则表达式匹配的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59217849/

    相关文章:

    bash - 计算每个子目录中同一报告文件的警告数量

    .net - 使用正则表达式分配变量

    bash - crontab 脚本失败 : end of file unexpected (expecting ")") when call $(date)

    javascript - AngularJS $sceDelegate 正则表达式 : Trouble whitelisting similar domains?

    linux - 恢复 Windows 7 启动加载程序

    Linux 机器不支持许多 Unix 命令

    linux - 将下拉菜单添加到图形对话框/YAD bash 脚本

    linux - 列出来自 linux 的 windows 域组内容

    JavaScript 搜索算法

    python - 不是有效的正则表达式