• vim利用查找命令,将所有的十进制数字转化位十六进制数字


    〇、前言

      在做程序开发的时候,通常有些ID会由各种子ID按位数拼接而成,如下所示:

    角色ID = 服务器ID左移16位 + 玩家下标
    UserID = ServerID << 16 + UserIndex 

      如果此ID打印在日志里面,则显示为10进制,想匹配服务器ID相同的玩家则会比较困难。

      这个时候就可以利用VIM丰富的函数,将服务器日志文件内的数字转为16进制,进而能够非常轻而易举的匹配相同服务器ID的玩家。

    一、操作流程

      1.用vim打开文件

    [WARN | 2020-01-06 15:02:11,974] | UserID[655471] User Online.
    [WARN | 2020-01-06 15:02:11,974] | UserID[655415] User Offline.
    [WARN | 2020-01-06 15:02:11,974] | UserID[655471] Create User Success.
    [WARN | 2020-01-06 15:02:11,974] | UserID[659811] User Offline
    [WARN | 2020-01-06 15:02:11,974] | UserID[918509] User Offline
    [WARN | 2020-01-06 15:02:11,974] | UserID[720895] User Offline
    [WARN | 2020-01-06 15:02:11,974] | UserID[720897] User Offline

      2.输入如下命令:

    :%s/d+/=printf("%X",submatch(0))/g

      3.最终结果显示如下:

    [WARN | 7E4-1-6 F:2:B,3CE] | UserID[A006F] User Online.
    [WARN | 7E4-1-6 F:2:B,3CE] | UserID[A0037] User Offline.
    [WARN | 7E4-1-6 F:2:B,3CE] | UserID[A006F] Create User Success.
    [WARN | 7E4-1-6 F:2:B,3CE] | UserID[A1163] User Offline
    [WARN | 7E4-1-6 F:2:B,3CE] | UserID[E03ED] User Offline
    [WARN | 7E4-1-6 F:2:B,3CE] | UserID[AFFFF] User Offline
    [WARN | 7E4-1-6 F:2:B,3CE] | UserID[B0001] User Offline

      4.至此,则想找服务器ID为10(也就是16进制的A)的玩家就非常轻易了。

    二、命令详解

      1."d+":匹配一个或多个数字,vim help参考:":help d"和":help d"

      2."printf":按照指定的格式输出,vim help参考:":help printf"

      3."submatch":返回匹配文本的低N个,如果N为0,返回整个匹配文本。vim help参考:":help submatch"

      所以以上命令:":%s/d+/=printf("%X",submatch(0))/g" 可以做如下分解:

      

    :%s       /    d+       /     =printf("%X",submatch(0))    /   g
    全局匹配        匹配数字           将匹配内容转换为16进制,             全部替换
    即:将匹配到的数字转换为十六进制,全局匹配全部替换
  • 相关阅读:
    tab选项卡可自动播放
    鼠标跟随效果
    初识html5
    浅谈权限设计
    css表格撑大问题解决
    通用数据权限管理系统设计
    样式兼容IE7
    RBAC用户角色权限设计
    大话权限设计
    一个简易实用的web权限管理模块的应用与实现
  • 原文地址:https://www.cnblogs.com/minglee/p/12160027.html
Copyright © 2020-2023  润新知