欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

用golang如何替換某個(gè)文件中的字符串

 更新時(shí)間:2021年04月25日 15:34:13   作者:hackssssss  
這篇文章主要介紹了用golang實(shí)現(xiàn)替換某個(gè)文件中的字符串操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

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

主要用來(lái)練習(xí)文件的讀取與寫(xiě)入

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é)果:

源文件:

將空格替換為逗號(hào):

新文件:

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

運(yù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),字符串并沒(méi)有被替換

然后,我們更改一句代碼

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),字符串可以被替換

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

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

相關(guān)文章

  • Go 標(biāo)準(zhǔn)庫(kù)增加metrics指標(biāo)探討分析

    Go 標(biāo)準(zhǔn)庫(kù)增加metrics指標(biāo)探討分析

    go中有一個(gè)神奇的標(biāo)準(zhǔn)庫(kù) runtime/metrics,提供了一系列預(yù)定義好的 Go 自身的相關(guān)指標(biāo),如果沒(méi)有編寫(xiě)過(guò)基礎(chǔ)監(jiān)控庫(kù)或者關(guān)注的比較少的朋友可能會(huì)沒(méi)接觸到這類(lèi)指標(biāo),本文展開(kāi)現(xiàn)有metrics 指標(biāo),并結(jié)合現(xiàn)有的社區(qū)討論一起看看還有沒(méi)有必要增加更多的標(biāo)準(zhǔn)庫(kù)指標(biāo)
    2023-10-10
  • Go?chassis云原生微服務(wù)開(kāi)發(fā)框架應(yīng)用編程實(shí)戰(zhàn)

    Go?chassis云原生微服務(wù)開(kāi)發(fā)框架應(yīng)用編程實(shí)戰(zhàn)

    這篇文章主要為大家介紹了Go?chassis云原生微服務(wù)開(kāi)發(fā)框架應(yīng)用編程實(shí)戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Go的固定時(shí)長(zhǎng)定時(shí)器和周期性時(shí)長(zhǎng)定時(shí)器

    Go的固定時(shí)長(zhǎng)定時(shí)器和周期性時(shí)長(zhǎng)定時(shí)器

    本文主要介紹了Go的固定時(shí)長(zhǎng)定時(shí)器和周期性時(shí)長(zhǎng)定時(shí)器,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Golang使用反射的動(dòng)態(tài)方法調(diào)用詳解

    Golang使用反射的動(dòng)態(tài)方法調(diào)用詳解

    Go是一種靜態(tài)類(lèi)型的語(yǔ)言,提供了大量的安全性和性能。這篇文章主要和大家介紹一下Golang使用反射的動(dòng)態(tài)方法調(diào)用,感興趣的小伙伴可以了解一下
    2023-03-03
  • 如何使用騰訊云go sdk 查詢對(duì)象存儲(chǔ)中最新文件

    如何使用騰訊云go sdk 查詢對(duì)象存儲(chǔ)中最新文件

    這篇文章主要介紹了使用騰訊云go sdk 查詢對(duì)象存儲(chǔ)中最新文件,這包括如何創(chuàng)建COS客戶端,如何逐頁(yè)檢索對(duì)象列表,并如何對(duì)結(jié)果排序以找到最后更新的對(duì)象,我們還展示了如何優(yōu)化用戶體驗(yàn),通過(guò)實(shí)時(shí)進(jìn)度更新和檢索多個(gè)文件來(lái)改進(jìn)程序,需要的朋友可以參考下
    2024-03-03
  • 盤(pán)點(diǎn)幾種Go語(yǔ)言開(kāi)發(fā)的IDE

    盤(pán)點(diǎn)幾種Go語(yǔ)言開(kāi)發(fā)的IDE

    Go語(yǔ)言作為一種新興的編程語(yǔ)言,近年來(lái)受到了越來(lái)越多的關(guān)注,它以其簡(jiǎn)潔、高效和并發(fā)性能而聞名,被廣泛應(yīng)用于各種軟件開(kāi)發(fā)項(xiàng)目中,本文將介紹幾種常用的Go語(yǔ)言IDE,并對(duì)它們進(jìn)行比較,幫助開(kāi)發(fā)者根據(jù)自己的需求選擇合適的工具,需要的朋友可以參考下
    2023-11-11
  • Golang共享變量如何解決問(wèn)題

    Golang共享變量如何解決問(wèn)題

    協(xié)程之間的通信只能夠通過(guò)通道。但是我們習(xí)慣于共享變量,而且很多時(shí)候使用共享變量能讓代碼更簡(jiǎn)潔。那么Golang共享變量如何解決問(wèn)題,感興趣的可以了解一下
    2021-12-12
  • golang開(kāi)啟mod后import報(bào)紅的簡(jiǎn)單解決方案

    golang開(kāi)啟mod后import報(bào)紅的簡(jiǎn)單解決方案

    這篇文章主要給大家介紹了關(guān)于golang開(kāi)啟mod后import報(bào)紅的簡(jiǎn)單解決方案,文中通過(guò)圖文將解決的辦法介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-01-01
  • go?sync?Waitgroup數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)基本操作詳解

    go?sync?Waitgroup數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)基本操作詳解

    這篇文章主要為大家介紹了go?sync?Waitgroup數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)基本操作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • 一文詳解Golang中的匿名變量

    一文詳解Golang中的匿名變量

    匿名變量是一種特殊類(lèi)型的變量,可以簡(jiǎn)化代碼并提高可讀性,本文將為大家詳細(xì)介紹一下golang中匿名變量的定義、特性和使用方法,需要的可以參考下
    2023-09-09

最新評(píng)論