⽤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 ${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!")
}
执⾏结果:
源⽂件:
将空格替换为逗号:
replaceall()
新⽂件:
补充: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⽅法。
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。如有错误或未考虑完全的地⽅,望不吝赐教。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论