zoukankan      html  css  js  c++  java
  • 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进制,             全部替换
    即:将匹配到的数字转换为十六进制,全局匹配全部替换
  • 相关阅读:
    vim的script、function及command
    Vim中如何移动光标
    command模式下命令的匹配及help内容的搜索
    为什么vim编辑模式下ctrl-w可以前向删除单词及按键映射的展开
    gcc如何实现C++中函数auto返回类型推导
    sqlserver 列转行
    【java笔记】可变长参数(...)
    【c#笔记】可变长参数(params)
    【c#笔记】c#与java的差异:接口定义实现
    【java笔记】Calendar类的陷阱
  • 原文地址:https://www.cnblogs.com/minglee/p/12160027.html
Copyright © 2011-2022 走看看