Erlang正则解析操作文件
-module(tool).
%% ====================================================================
%% API functions
%% ====================================================================
-export([modify_hostname/0,modify_ip/0]).
modify_hostname() ->
{ok,HostName} = inet:gethostname(),
%通过截取和加入。得到priv所在的文件夹
EbinDir = filename:dirname(code:which(?MODULE)),
ProjectDir = string:sub_string(EbinDir,1,length(EbinDir)-4),
PrivDir = ProjectDir ++ "priv/",
{ok,Files} = file:list_dir(PrivDir),
lists:foreach(fun(A)-> replace(PrivDir++A,HostName) end,Files),
io:format("modify hostname successfully!~n").
replace(FileName,HostName) ->
{ok,Content} = file:read_file(FileName),
RawString = binary_to_list(Content),
%% 以非贪婪模式匹配@开头不包括}的随意字符同一时候以逗号结束的特征串
{ok,MP1} = re:compile("@[^}]*,",[ungreedy]),
ResultString1 = re:replace(RawString,MP1,"@"++HostName++",",[{return,list},global]),
%% 以非贪婪模式匹配@开头不包括}和逗号的随意字符同一时候以]}结束的特征串
{ok,MP2} = re:compile("@[^},]*]}",[ungreedy]),
ResultString2 = re:replace(ResultString1,MP2,"@"++HostName++"]},",[{return,list},global]),
%% 以非贪婪模式匹配@开头不包括}和逗号的随意字符同一时候以]}结束的特征串
{ok,MP3} = re:compile("@[^,]*}]",[ungreedy]),
ResultString3 = re:replace(ResultString2,MP3,"@"++HostName++"}]",[{return,list},global]),
file:write_file(FileName, list_to_binary(ResultString3)).
modify_ip() ->
{ok,Iflist} = inet:getif(),
{A,B,C,D} = element(1,lists:nth(2,Iflist)),
Ebin = filename:dirname(code:which(?MODULE)),
%% 得到nodefinder.app所在的路径
ProjectDir = string:sub_string(Ebin,1,length(Ebin)-17),
AppDir = ProjectDir ++ "Res/ebin/nodefinder.app",
{ok,Content} = file:read_file(AppDir),
LocalIp = "{"++integer_to_list(A)++","++integer_to_list(B)++","++integer_to_list(C)++","++integer_to_list(D)++"}",
RawString = binary_to_list(Content),
%% 通过正則表達式进行匹配后。然后替换成本机Ip
{ok,MP} = re:compile("{[0-9]+,[0-9]+,[0-9]+,[0-9]+}"),
ResultString = re:replace(RawString, MP, LocalIp,[{return,list}]),
file:write_file(AppDir,list_to_binary(ResultString)),
io:format("modify ip successfully!~n").
解析的文件例如以下:
总结:(1)学习通过filename:dirname(code:which(?MOUDLE))获取文件所在的绝对路径。
(2)erlang的file:get_cwd(),file:list_dir("."),默认的是工作文件夹或是c:cd(...)后进入的文件夹,假设没有设定erlang的工作文件夹。则“.”表示当前文件夹;
(3)学习erlang中正則表達式的用法
Erlang正则解析操作文件的更多相关文章
- 【JAVA使用XPath、DOM4J解析XML文件,实现对XML文件的CRUD操作】
一.简介 1.使用XPath可以快速精确定位指定的节点,以实现对XML文件的CRUD操作. 2.去网上下载一个“XPath帮助文档”,以便于查看语法等详细信息,最好是那种有很多实例的那种. 3.学习X ...
- [Xcode 实际操作]七、文件与数据-(8 )读取和解析Plist文件(属性列表文件)
目录:[Swift]Xcode实际操作 本文将演示如何读取和解析Plist文件,即属性列表文件. 它是用来存储,串行化后的对象的文件. 在项目名称上点击鼠标右键,弹出右键菜单, 选择[New File ...
- 用dom4j解析xml文件并执行增删改查操作
转自:https://www.aliyun.com/jiaocheng/1339446.html xml文件: <?xml version="1.0" encoding=&q ...
- Jsoup系列学习(2)-解析html文件
解析html文件 1.当我们通过发送http请求时,有时候返回结果是一个html格式字符串,你需要从一个网站获取和解析一个HTML文档,并查找其中的相关数据.你可以使用下面解决方法: 使用 Jsoup ...
- CSharpGL(5)解析3DS文件并用CSharpGL渲染
CSharpGL(5)解析3DS文件并用CSharpGL渲染 我曾经写过一个简单的*.3ds文件的解析器,但是只能解析最基本的顶点.索引信息,且此解析器是仿照别人的C++代码改写的,设计的也不好,不方 ...
- java中采用dom4j解析xml文件
一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4 ...
- XML:使用DOM技术解析xML文件中的城市,实现select级联选择
中国的城市xml格式:cities.xml <?xml version="1.0" encoding="utf-8"?> <china> ...
- dom4j如何解析XML文件
最近在 一些对xml文件的操作,下面简单写一个dom4j解析xml文件并将其封装到一个javabean中的例子,只是具有针对性的,不是通用的,仅供参考哦~~ 首先说:dom4j是一个java的XML ...
- Android中的几种解析XML文件的类
Ø DOM解析 优点: 1.XML树在内存中完整存储,因此可以直接修改其数据和结构. 2.可以通过该解析器随时访问XML树中的任何一个节点. 3.DOM解析器的API在使用上也相对比较简单. 缺点:如 ...
随机推荐
- hbase练习题
-- 配置环境变量,因为在hbase中有的地方可能用到了环境变量-- bin/start-hbase.sh-- bin/hbase shell-- 访问http://mini0:16010/ 可以看浏 ...
- linux 文件夹的颜色代表什么意思
linux 文件夹的颜色代表什么意思 绿色 蓝色 黑色代表什么意思 蓝色表示目录: 绿色表示可执行文件: 红色表示压缩文件: 浅蓝色表示链接文件: 灰色表示其它文件: 红色闪烁表示链接的文件有问题了: ...
- 将td中文字过长的部分变成省略号显示的小技巧
首先设置表格的样式table-layout:"fixed"再设置表格的宽度(这步必须) 最后再设置td样式的三个必要属性 代码如下: text-overflow: ellipsis ...
- JDK7 Garbage Frist
JDK7 G1新型垃圾回收器. http://www.infoq.com/cn/articles/jdk7-garbage-first-collector
- Web安全测试(一)-手工安全测试方法&修改建议
常见问题 1.XSS(CrossSite Script)跨站脚本攻击 XSS(CrossSite Script)跨站脚本攻击.它指的是恶意攻击者往Web 页面里插入恶意 html代码,当用户浏览该页之 ...
- SQL2005 第一次配置没有服务器名称的问题
问题描述:第一次启动没有服务器名称 解决方法: 1.进入 我的电脑——属性——管理——服务 找到SQL Server 右键属性 弹出下图 找到可执行文件路径 鼠标左键拖到底部 看到 -s实例名,这里的 ...
- Unity3D GUI图形用户界面系统
1.skin变量 using UnityEngine; using System.Collections; public class Skin : MonoBehaviour { public GUI ...
- Python 实现购物商城,含有用户入口和商家入口
这是模拟淘宝的一个简易的购物商城程序. 用户入口具有以下功能: 登录认证 可以锁定用户 密码输入次数大于3次,锁定用户名 连续三次输错用户名退出程序 可以选择直接购买,也可以选择加入购物车 用户使用支 ...
- laragon 使用(php版本升级切换)
php版本升级切换 1.下载对应不带 nts 的php版本(http://windows.php.net/download/),然后解压放到\laragon\bin\php目录下 2.记得改环境变量下 ...
- Ubuntu系统-网络配置
网络配置 静态IP root@ubuntu:~# cat /etc/network/interfaces # This file describes the network interfaces av ...