主頁 > 知識庫 > 用golang如何替換某個文件中的字符串

用golang如何替換某個文件中的字符串

熱門標(biāo)簽:阿克蘇地圖標(biāo)注 涿州代理外呼系統(tǒng) 評價高的400電話辦理 外呼系統(tǒng)顯本地手機號 電話機器人軟件免費 百度地圖標(biāo)注后傳給手機 外呼系統(tǒng)用什么卡 壽光微信地圖標(biāo)注 excel地圖標(biāo)注分布數(shù)據(jù)

用golang實現(xiàn)了某個文件中字符的替換,替換為按行替換,執(zhí)行后會生成新文件,如a.txt,執(zhí)行后生成a.txt.mdf。新文件即修改后的內(nèi)容。

主要用來練習(xí)文件的讀取與寫入

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!")
}

執(zhí)行結(jié)果:

源文件:

將空格替換為逗號:

新文件:

補充:golang關(guān)于字符串替換的建議

運行下面一段代碼

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)
}

結(jié)果輸出:

true

"/Users/max/Downloads/test/website\\nbackup\n"

"/Users/max/Downloads/test/website\\nbackup\n"

"/Users/max/Downloads/test/website\\nbackup\n"

可以發(fā)現(xià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)
}

結(jié)果輸出:

true

"/Users/max/Downloads/test/website\\nbackup\n"

"/Users/max/Downloads/test/website\\nbackup\n"

""

可以發(fā)現(xiàn),字符串可以被替換

所以,建議在使用字符串替換時,避免使用正則表達(dá)式的ReplaceAllString方法,而應(yīng)該選擇更為穩(wěn)妥的strings包中的ReplaceAll方法。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • 基于golang中container/list包的用法說明
  • Golang中List的實現(xiàn)方法示例詳解
  • golang使用grpc+go-kit模擬oauth認(rèn)證的操作
  • golang中for range的取地址操作陷阱介紹
  • golang如何去除多余空白字符(含制表符)
  • golang正則之命名分組方式
  • 解決golang中container/list包中的坑

標(biāo)簽:吐魯番 蘭州 梅河口 欽州 汕頭 銅川 重慶 雞西

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《用golang如何替換某個文件中的字符串》,本文關(guān)鍵詞  用,golang,如何,替換,某個,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《用golang如何替換某個文件中的字符串》相關(guān)的同類信息!
  • 本頁收集關(guān)于用golang如何替換某個文件中的字符串的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章