用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 := 1for {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 mainimport ( 'fmt' 'regexp')func main() { tmp := '/Users/max/Downloads/test/websitenbackupn' buf := []byte(tmp) a := '/Users/max/Downloads/test/websitenbackup' r := regexp.MustCompile(a + 'n') taskText := r.ReplaceAllString(string(buf[:]), '') fmt.Println(r.String() == string(buf[:])) fmt.Printf('%qn', r.String()) fmt.Printf('%qn', string(buf[:])) fmt.Printf('%qn', taskText)}
结果输出:
true
'/Users/max/Downloads/test/websitenbackupn'
'/Users/max/Downloads/test/websitenbackupn'
'/Users/max/Downloads/test/websitenbackupn'
可以发现,字符串并没有被替换然后,我们更改一句代码
package mainimport ( 'fmt' 'regexp' 'strings')func main() { tmp := '/Users/max/Downloads/test/websitenbackupn' buf := []byte(tmp) a := '/Users/max/Downloads/test/websitenbackup' 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('%qn', r.String()) fmt.Printf('%qn', string(buf[:])) fmt.Printf('%qn', taskText)}
结果输出:
true
'/Users/max/Downloads/test/websitenbackupn'
'/Users/max/Downloads/test/websitenbackupn'
''
可以发现,字符串可以被替换所以,建议在使用字符串替换时,避免使用正则表达式的ReplaceAllString方法,而应该选择更为稳妥的strings包中的ReplaceAll方法。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持优爱好网。如有错误或未考虑完全的地方,望不吝赐教。
相关文章:
1. Flutter刷新组件RefreshIndicator自定义样式demo2. js的一些潜在规则使用分析3. 基于JavaScript实现图片裁剪功能4. React优雅的封装SvgIcon组件示例5. uniapp自定义验证码输入框并隐藏光标6. 详解JavaScript中原始数据类型Symbol的使用7. JavaScript深拷贝方法structuredClone使用8. uniapp 手机验证码输入框实现代码(随机数、倒计时、隐藏手机号码中间四位)可以直接使用9. 使用Node.js实现Clean Architecture方法示例详解10. Jquery使用原生AJAX方法请求数据