• 【一周一Q】如何快速复制有规律内容


    最近微信群里打算每周可以出个题目,丢给大家一起思考下问题的处理方式,不一定有标准的答案,不过总会有更合适答案的情况

    题目如下

     1 快速复制额外的dns配置,这个是在处理双域名指向的时候遇到的一个需求,需要处理几百个记录的指向,如何快速并且正确的处理完成
     2 最原始配置文件内容
     3 address=/jenkins.f6car.org/10.29.128.247
     4 address=/kibana.f6yc.org/10.29.128.247
     5 address=/auto.f6car.org/192.168.13.103
     6 
     7 需要改成如下这样,即每条原始记录,增加一个org.cn后缀
     8 address=/jenkins.f6car.org/10.29.128.247
     9 address=/jenkins.f6car.org.cn/10.29.128.247
    10 address=/kibana.f6yc.org/10.29.128.247
    11 address=/kibana.f6yc.org.cn/10.29.128.247
    12 address=/auto.f6car.org/192.168.13.103
    13 address=/auto.f6car.org.cn/192.168.13.103

    题目贴的只有三项dns记录,实际这类配置有接近100条,如果都一条条复制,估计一天不用干别的事情了,所以要想想如何又快又省的完成这个事情

    分析下题目,只是增加了一个新的域名指向,别的内容都不变,而且每行数据都有一样的规律,分了三部分,分别是固定的address头,中间的域名,最后的IP地址。新添加的记录和老记录唯一的不同是中间域名部分增加了字符串‘.cn’

    分析完毕之后,考虑怎么实现这种操作了,这里提供两个参考方向

    参考一:

    根据分隔符 / ,将字符串切片三部分,中间一部分再增加‘.cn’后缀即可,如使用python的split,加上字符串拼接接口实现,这里不丢实现方式,各位可以自己尝试下

    参考二:

    由于字符串很有规律,考虑使用正则匹配方式完成此功能,这里以 Mac机器Visual Studio Code给出匹配规则

    使用正则匹配:(address=/(.+)/(.+))
    
    匹配内容替换成:$1
    address=/$2.cn/$3
    

    简单解释下 () 表示 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 ( 和 )。

    $1 表示反向引用,对一个正则表达式模式或部分模式两边添加圆括号将导致相关匹配存储到一个临时缓冲区中,所捕获的每个子匹配都按照在正则表达式模式中从左到右出现的顺序存储。缓冲区编号从 1 开始,最多可存储 99 个捕获的子表达式。在大部分其他工具里,如notepad++ 使用 1 表示反向引用第一个匹配内容。

    表示换行符号,在window机器执行的时候,根据编译器的不同可能要换成 才可以匹配结束换行符号

    正则匹配涉及内容不多,但是要理解掌握需要假以时日的锻炼,一旦掌握可以极大的提高工作效率,如果还没掌握或者用的生疏了,再学习巩固下。

     

  • 相关阅读:
    用户登录系统(三)
    SQL server 2005 时间函数应用 查询出结果为00:00:00 小时、分钟、秒
    Windows Server 2003系统 常用操作技巧集绵,发现了继续添加
    新一代井下数字集群通讯系统需求分析(一)
    WPF学习笔记(一)
    建立一个VSS源代码管理服务器,下面介绍建立的过程与实际应用情况
    Vista下使用VS2005的时候提示"没有安装FrontPage服务器扩展"的问题。
    SQL语句导入/导出EXCEL(转载自:白袜子blog)
    sql2005"因为它正用于复制"的错误解决办法
    (转)CS0016: 未能写入输出文件“c:\WINDOWS\xxxxxsktsuj.dll”“拒绝访问。”的处理
  • 原文地址:https://www.cnblogs.com/monley/p/11223476.html
Copyright © 2020-2023  润新知