用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 相关文章推荐
win10下go mod配置方式
Apr 25 Golang
Go缓冲channel和非缓冲channel的区别说明
Apr 25 Golang
go语言中切片与内存复制 memcpy 的实现操作
Apr 27 Golang
goland 清除所有的默认设置操作
Apr 28 Golang
Golang中interface{}转为数组的操作
Apr 30 Golang
go设置多个GOPATH的方式
May 05 Golang
Go 自定义package包设置与导入操作
May 06 Golang
golang中的并发和并行
May 08 Golang
go语言基础 seek光标位置os包的使用
May 09 Golang
Go语言空白表示符_的实例用法
Jul 04 Golang
GoFrame框架数据校验之校验结果Error接口对象
Jun 21 Golang
Go gorilla/sessions库安装使用
Aug 14 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
Email+URL的判断和自动转换函数
2006/10/09 PHP
PHP读取CURL模拟登录时生成Cookie文件的方法
2014/11/04 PHP
解决在laravel中auth建立时候遇到的问题
2019/10/15 PHP
JQuery实现自定义对话框的代码
2008/06/15 Javascript
Extjs列表详细信息窗口新建后自动加载解决方法
2010/04/02 Javascript
jquery focus(fn),blur(fn)方法实例代码
2011/12/16 Javascript
深入理解JavaScript系列(7) S.O.L.I.D五大原则之开闭原则OCP
2012/01/15 Javascript
Jquery图片滚动与幻灯片的实例代码
2013/04/08 Javascript
手机端网页点击链接触发自动拨打或保存电话的示例代码
2014/08/15 Javascript
JavaScript小技巧整理
2015/12/30 Javascript
2种简单的js倒计时方式
2017/10/20 Javascript
利用百度地图API获取当前位置信息的实例
2017/11/06 Javascript
微信小程序调用摄像头隐藏式拍照功能
2018/08/22 Javascript
在Vue-cli里应用Vuex的state和mutations方法
2018/09/16 Javascript
vue 实现走马灯效果
2019/10/28 Javascript
[45:32]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
python分割和拼接字符串
2013/11/01 Python
Python线程详解
2015/06/24 Python
python将ansible配置转为json格式实例代码
2017/05/15 Python
Python使用MD5加密算法对字符串进行加密操作示例
2018/03/30 Python
Django unittest 设置跳过某些case的方法
2018/12/26 Python
Python列表(List)知识点总结
2019/02/18 Python
Python如何调用JS文件中的函数
2019/08/16 Python
Python Gitlab Api 使用方法
2019/08/28 Python
Python读取JSON数据操作实例解析
2020/05/18 Python
法国购买二手电子产品网站:Asgoodasnew
2020/03/27 全球购物
体育教育毕业生自荐信
2013/11/21 职场文书
简历自我评价模版
2014/01/31 职场文书
物控部经理职务说明书
2014/02/25 职场文书
赞美老师的演讲稿
2014/05/22 职场文书
英文慰问信
2015/02/14 职场文书
党员干部廉政承诺书
2015/04/28 职场文书
初中历史教学反思
2016/02/19 职场文书
MySQL 分页查询的优化技巧
2021/05/12 MySQL
对PyTorch中inplace字段的全面理解
2021/05/22 Python
Python+腾讯云服务器实现每日自动健康打卡
2021/12/06 Python