用golang如何替换某个文件中的字符串


Posted in Golang onApril 25, 2021

用golang实现了某个文件中字符的替换,替换为按行替换,执行后会生成新文件,如a.txt,执行后生成a.txt.mdf。新文件即修改后的内容。

主要用来练习文件的读取与写入

package main 
import (
	"bufio"
	"fmt"
	"io"
	"os"
	"strings"
)
 
func main() {
	if len(os.Args) != 4 {
		fmt.Println("lack of config file, eg: go run main.go ${path_of_file} ${old_string} ${new_string}")
		os.Exit(-1)
	}
	fileName := os.Args[1]
	in, err := os.Open(fileName)
	if err != nil {
		fmt.Println("open file fail:", err)
		os.Exit(-1)
	}
	defer in.Close()
 
	out, err := os.OpenFile(fileName+".mdf", os.O_RDWR|os.O_CREATE, 0766)
	if err != nil {
		fmt.Println("Open write file fail:", err)
		os.Exit(-1)
	}
	defer out.Close()
 
	br := bufio.NewReader(in)
	index := 1
	for {
		line, _, err := br.ReadLine()
		if err == io.EOF {
			break
		}
		if err != nil {
			fmt.Println("read err:", err)
			os.Exit(-1)
		}
		newLine := strings.Replace(string(line), os.Args[2], os.Args[3], -1)
		_, err = out.WriteString(newLine + "\n")
		if err != nil {
			fmt.Println("write to file fail:", err)
			os.Exit(-1)
		}
		fmt.Println("done ", index)
		index++
	}
	fmt.Println("FINISH!")
}

执行结果:

源文件:

用golang如何替换某个文件中的字符串

将空格替换为逗号:

用golang如何替换某个文件中的字符串

新文件:

用golang如何替换某个文件中的字符串

补充:golang关于字符串替换的建议

运行下面一段代码

package main
import (
 "fmt"
 "regexp"
)
func main() {
 tmp := "/Users/max/Downloads/test/website\\nbackup\n"
 buf := []byte(tmp)
 a := "/Users/max/Downloads/test/website\\nbackup"
 r := regexp.MustCompile(a + "\n")
 taskText := r.ReplaceAllString(string(buf[:]), "")
 fmt.Println(r.String() == string(buf[:]))
 fmt.Printf("%q\n", r.String())
 fmt.Printf("%q\n", string(buf[:]))
 fmt.Printf("%q\n", taskText)
}

结果输出:

true

"/Users/max/Downloads/test/website\\nbackup\n"

"/Users/max/Downloads/test/website\\nbackup\n"

"/Users/max/Downloads/test/website\\nbackup\n"

可以发现,字符串并没有被替换

然后,我们更改一句代码

package main
import (
 "fmt"
 "regexp"
 "strings"
)
func main() {
 tmp := "/Users/max/Downloads/test/website\\nbackup\n"
 buf := []byte(tmp)
 a := "/Users/max/Downloads/test/website\\nbackup"
 r := regexp.MustCompile(a + "\n")
 // taskText := r.ReplaceAllString(string(buf[:]), "")
 taskText := strings.ReplaceAll(string(buf[:]), r.String(), "")
 fmt.Println(r.String() == string(buf[:]))
 fmt.Printf("%q\n", r.String())
 fmt.Printf("%q\n", string(buf[:]))
 fmt.Printf("%q\n", taskText)
}

结果输出:

true

"/Users/max/Downloads/test/website\\nbackup\n"

"/Users/max/Downloads/test/website\\nbackup\n"

""

可以发现,字符串可以被替换

所以,建议在使用字符串替换时,避免使用正则表达式的ReplaceAllString方法,而应该选择更为稳妥的strings包中的ReplaceAll方法。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Golang 相关文章推荐
golang interface判断为空nil的实现代码
Apr 24 Golang
goland设置颜色和字体的操作
May 05 Golang
浅谈golang package中init方法的多处定义及运行顺序问题
May 06 Golang
goland 设置project gopath的操作
May 06 Golang
GoLang中生成UUID唯一标识的实现
May 08 Golang
Golang中异常处理机制详解
Jun 08 Golang
Go语言空白表示符_的实例用法
Jul 04 Golang
go goroutine 怎样进行错误处理
Jul 16 Golang
Golang并发操作中常见的读写锁详析
Aug 30 Golang
golang生成并解析JSON
Apr 14 Golang
Golang解析JSON对象
Apr 30 Golang
Go语言编译原理之变量捕获
Aug 05 Golang
Golang 正则匹配效率详解
golang正则之命名分组方式
Apr 25 #Golang
go语言-在mac下brew升级golang
Apr 25 #Golang
go原生库的中bytes.Buffer用法
Apr 25 #Golang
Go缓冲channel和非缓冲channel的区别说明
Apr 25 #Golang
Go语言使用select{}阻塞main函数介绍
win10下go mod配置方式
You might like
PHPMYADMIN 简明安装教程 推荐
2010/03/07 PHP
探讨:php中在foreach中使用foreach ($arr as &$value) 这种类型的解释
2013/06/24 PHP
ThinkPHP实现多数据库连接的解决方法
2014/07/01 PHP
php单例模式的简单实现方法
2016/06/10 PHP
javascript获取select标签选中的值
2016/06/04 Javascript
three.js实现围绕某物体旋转
2017/01/25 Javascript
nodejs连接mysql数据库简单封装示例-mysql模块
2017/04/10 NodeJs
详解React开发中使用require.ensure()按需加载ES6组件
2017/05/12 Javascript
node.js操作mysql简单实例
2017/05/25 Javascript
在Vue组件化中利用axios处理ajax请求的使用方法
2017/08/25 Javascript
基于Vue过渡状态实例讲解
2017/09/14 Javascript
jquery之基本选择器practice(实例讲解)
2017/09/30 jQuery
基于VUE移动音乐WEBAPP跨域请求失败的解决方法
2018/01/16 Javascript
vue进行图片的预加载watch用法实例讲解
2018/02/07 Javascript
npm 常用命令详解(小结)
2019/01/17 Javascript
一篇文章介绍redux、react-redux、redux-saga总结
2019/05/23 Javascript
JavaScript canvas绘制折线图
2020/02/18 Javascript
vuex(vue状态管理)的特殊应用案例分享
2020/03/03 Javascript
[01:11:46]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第一场 2月23日
2021/03/11 DOTA
python2.7无法使用pip的解决方法(安装easy_install)
2018/04/03 Python
用Python下载一个网页保存为本地的HTML文件实例
2018/05/21 Python
python 接收处理外带的参数方法
2018/12/03 Python
浅谈Python反射 & 单例模式
2019/03/21 Python
python 将有序数组转换为二叉树的方法
2019/03/26 Python
python3.7 openpyxl 删除指定一列或者一行的代码
2019/10/08 Python
瑞典灯具和照明网上商店:Lamp24.se
2018/03/17 全球购物
受欢迎的大学生自我评价
2013/12/05 职场文书
生物科学专业个人求职信范文
2013/12/07 职场文书
大学生职业生涯规划范文——找准自我,定位人生
2014/01/23 职场文书
党员公开承诺书范文
2014/03/25 职场文书
贷款担保书
2015/01/20 职场文书
销售会议开幕词
2015/01/28 职场文书
《夜莺的歌声》教学反思
2016/02/22 职场文书
vue基于Teleport实现Modal组件
2021/05/31 Vue.js
Win10防火墙白名单怎么设置?Win10添加防火墙白名单方法
2022/04/06 数码科技
Python创建SQL数据库流程逐步讲解
2022/09/23 Python