用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语言-在mac下brew升级golang
Apr 25 Golang
golang http使用踩过的坑与填坑指南
Apr 27 Golang
golang 接口嵌套实现复用的操作
Apr 29 Golang
解决Golang time.Parse和time.Format的时区问题
Apr 29 Golang
解决Golang中goroutine执行速度的问题
May 02 Golang
go类型转换及与C的类型转换方式
May 05 Golang
聊聊golang中多个defer的执行顺序
May 08 Golang
详解Go语言Slice作为函数参数的使用
Jul 02 Golang
Go语言基础函数基本用法及示例详解
Nov 17 Golang
Golang 并发下的问题定位及解决方案
Mar 16 Golang
Golang使用Panic与Recover进行错误捕获
Mar 22 Golang
Golang bufio详细讲解
Apr 21 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
PHP实现图片简单上传
2006/10/09 PHP
ThinkPHP的L方法使用简介
2014/06/18 PHP
php中实现获取随机数组列表的自定义函数
2015/04/02 PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
2015/12/19 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
2015/12/21 PHP
一个简单安全的PHP验证码类、PHP验证码
2016/09/24 PHP
jquery trim() 功能源代码
2011/02/14 Javascript
JS+DIV实现鼠标划过切换层效果的实例代码
2013/11/26 Javascript
IE与FireFox的JavaScript兼容问题解决办法
2013/12/31 Javascript
JQuery表单验证插件EasyValidator用法分析
2014/11/15 Javascript
理解JavaScript表单的基础知识
2016/01/25 Javascript
JS实现列表的响应式排版(推荐)
2016/09/01 Javascript
输入框点击时边框变色效果的实现方法
2016/12/26 Javascript
使用Vue动态生成form表单的实例代码
2018/04/26 Javascript
微信小程序出现wx.getLocation再次授权问题的解决方法分析
2019/01/16 Javascript
[03:53]2016国际邀请赛中国区预选赛第三日TOP10精彩集锦
2016/06/29 DOTA
Python实现微信公众平台自定义菜单实例
2015/03/20 Python
Python中super关键字用法实例分析
2015/05/28 Python
纯python实现机器学习之kNN算法示例
2018/03/01 Python
使用python3+xlrd解析Excel的实例
2018/05/04 Python
python之文件读取一行一行的方法
2018/07/12 Python
python使用正则表达式来获取文件名的前缀方法
2018/10/21 Python
Python父目录、子目录的相互调用方法
2019/02/16 Python
深入了解和应用Python 装饰器 @decorator
2019/04/02 Python
python opencv圆、椭圆与任意多边形的绘制实例详解
2020/02/06 Python
python如何保存文本文件
2020/06/07 Python
python else语句在循环中的运用详解
2020/07/06 Python
通过CSS3的object-fit来调整图片适配尺寸的技巧简介
2016/02/27 HTML / CSS
俄罗斯药房连锁店:ASNA
2020/06/20 全球购物
幼儿园三八妇女节活动总结
2015/02/06 职场文书
烛光里的微笑观后感
2015/06/17 职场文书
信用卡工作证明范本
2015/06/19 职场文书
高温慰问简报
2015/07/21 职场文书
情侣餐厅的创业计划书范本!
2019/07/26 职场文书
python用tkinter开发的扫雷游戏
2021/06/01 Python
MySQL常用慢查询分析工具详解
2022/08/14 MySQL