用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 相关文章推荐
goland 清除所有的默认设置操作
Apr 28 Golang
Go语言中break label与goto label的区别
Apr 28 Golang
完美解决golang go get私有仓库的问题
May 05 Golang
试了下Golang实现try catch的方法
Jul 01 Golang
Go语言基础知识点介绍
Jul 04 Golang
Go语言实现一个简单的并发聊天室的项目实战
Mar 18 Golang
golang实现浏览器导出excel文件功能
Mar 25 Golang
简单聊聊Golang中defer预计算参数
Mar 25 Golang
golang操作redis的客户端包有多个比如redigo、go-redis
Apr 14 Golang
golang使用map实现去除重复数组
Apr 14 Golang
Golang map映射的用法
Apr 22 Golang
Python测试框架pytest核心库pluggy详解
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
Laravel框架中实现使用阿里云ACE缓存服务
2015/02/10 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
2016/05/20 PHP
PHP PDOStatement::setFetchMode讲解
2019/02/03 PHP
PHP设计模式(九)外观模式Facade实例详解【结构型】
2020/05/02 PHP
Alliance vs Liquid BO3 第三场2.13
2021/03/10 DOTA
Jquery 例外被抛出且未被接住原因介绍
2013/09/04 Javascript
js使下拉列表框可编辑不止是选择
2013/12/12 Javascript
jquery实现submit提交表单
2015/02/03 Javascript
AngularJS中如何使用$parse或$eval在运行时对Scope变量赋值
2016/01/25 Javascript
JS前端加密算法示例
2016/12/22 Javascript
javascript 面向对象实战思想分享
2017/09/07 Javascript
Vue调试神器vue-devtools安装方法
2017/12/12 Javascript
详解Angular5路由传值方式及其相关问题
2018/04/28 Javascript
javascript动态创建对象的属性详解
2018/11/07 Javascript
JS使用new操作符创建对象的方法分析
2019/05/30 Javascript
Vue3 源码导读(推荐)
2019/10/14 Javascript
python的类变量和成员变量用法实例教程
2014/08/25 Python
跟老齐学Python之字典,你还记得吗?
2014/09/20 Python
使用IPython下的Net-SNMP来管理类UNIX系统的教程
2015/04/15 Python
Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法
2018/05/04 Python
Python+pyplot绘制带文本标注的柱状图方法
2019/07/08 Python
python+django+rest框架配置创建方法
2019/08/31 Python
Python爬虫实现模拟点击动态页面
2020/03/05 Python
Python如何操作office实现自动化及win32com.client的运用
2020/04/01 Python
Python pandas对excel的操作实现示例
2020/07/21 Python
PyCharm2019.3永久激活破解详细图文教程,亲测可用(不定期更新)
2020/10/29 Python
Python自动化办公Excel模块openpyxl原理及用法解析
2020/11/05 Python
托管代码(Managed Code)和非托管代码(Unmanaged Code)有什么区别
2014/09/29 面试题
音乐学个人的自荐书范文
2013/11/26 职场文书
十佳班主任事迹材料
2014/01/18 职场文书
会计学专业学生的求职信范文
2014/01/27 职场文书
驾驶员岗位职责
2014/01/29 职场文书
今冬明春火灾防控工作方案
2014/05/29 职场文书
无刑事犯罪记录证明范本
2014/09/29 职场文书
Python中json.dumps()函数的使用解析
2021/05/17 Python
mongodb清除连接和日志的正确方法分享
2021/09/15 MongoDB