用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 相关文章推荐
go语言中切片与内存复制 memcpy 的实现操作
Apr 27 Golang
golang import自定义包方式
Apr 29 Golang
解决go在函数退出后子协程的退出问题
Apr 30 Golang
浅谈golang package中init方法的多处定义及运行顺序问题
May 06 Golang
GoLang中生成UUID唯一标识的实现
May 08 Golang
Golang实现AES对称加密的过程详解
May 20 Golang
Go 语言下基于Redis分布式锁的实现方式
Jun 28 Golang
Go Plugins插件的实现方式
Aug 07 Golang
Go语言读取txt文档的操作方法
Jan 22 Golang
golang实现浏览器导出excel文件功能
Mar 25 Golang
如何解决goland,idea全局搜索快捷键失效问题
Apr 03 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
mysql5写入和读出乱码解决
2006/11/25 PHP
安装apache2.2.22配置php5.4(具体操作步骤)
2013/06/26 PHP
编写PHP脚本使WordPress的主题支持Widget侧边栏
2015/12/14 PHP
PHP 极验验证码实例讲解
2016/09/29 PHP
PHP实现APP微信支付的实例讲解
2018/02/10 PHP
兼容ie和firefox js关闭代码
2008/12/11 Javascript
JavaScript实现存储HTML字符串示例
2014/04/21 Javascript
javascript从定义到执行 你不知道的那些事
2016/01/04 Javascript
web.js.字符串与正则表达式操作
2017/05/13 Javascript
微信小程序版翻牌小游戏
2018/01/26 Javascript
vue刷新和tab切换实例
2018/02/11 Javascript
一篇文章,教你学会Vue CLI 插件开发
2019/04/17 Javascript
vue中uni-app 实现小程序登录注册功能
2019/10/12 Javascript
ES6 proxy和reflect的使用方法与应用实例分析
2020/02/15 Javascript
Jquery cookie插件实现原理代码解析
2020/08/04 jQuery
vue使用echarts画组织结构图
2021/02/06 Vue.js
[48:41]VP vs VG Supermajor小组赛 B组胜者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
[00:59]PWL开团时刻DAY7——我在赶
2020/11/06 DOTA
Django基础之Model操作步骤(介绍)
2017/05/27 Python
python基础教程项目四之新闻聚合
2018/04/02 Python
详解Python 装饰器执行顺序迷思
2018/08/08 Python
Python基础知识点 初识Python.md
2019/05/14 Python
Python 实现数据结构-循环队列的操作方法
2019/07/17 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
2020/02/11 Python
python基于exchange函数发送邮件过程详解
2020/11/06 Python
python基于socket模拟实现ssh远程执行命令
2020/12/05 Python
车间主管岗位职责
2013/11/14 职场文书
家长会主持词
2014/03/26 职场文书
学习交流会主持词
2014/04/01 职场文书
《明天,我们毕业》教学反思
2014/04/24 职场文书
心理健康活动总结
2014/04/30 职场文书
运输企业安全生产责任书
2014/07/28 职场文书
2014年学习厉行节约反对浪费思想汇报
2014/09/10 职场文书
2015年父亲节寄语
2015/03/23 职场文书
物流仓管员岗位职责
2015/04/01 职场文书
详解CSS不受控制的position fixed
2021/05/25 HTML / CSS