• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    用golang如何替换某个文件中的字符串

    用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关于字符串替换的建议

    运行下面一段代码

    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中container/list包的用法说明
    • Golang中List的实现方法示例详解
    • golang使用grpc+go-kit模拟oauth认证的操作
    • golang中for range的取地址操作陷阱介绍
    • golang如何去除多余空白字符(含制表符)
    • golang正则之命名分组方式
    • 解决golang中container/list包中的坑
    上一篇:golang正则之命名分组方式
    下一篇:golang如何去除多余空白字符(含制表符)
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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