Go语言删除文本文件中的指定行

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

GO语言删除文本文件中的指定行

1. 思路

假设现在有一个文本文件我们需要删除文件中乱码的行。我们可以使用go的os库来处理文件遍历整个文件然后将除过乱码的行写入一个新文件以此来实现我们的需求。

2. 处理文件

假设我们现在有一个配置文件hello.conf用户经常修改导致文件错乱或出现乱码情况我们需要去除乱码行以保证配置文件可用。
如下一个示例文件注释使用#加文本配置信息使用等号分隔我们需要去除掉文件中的空行、乱码行、不包含=和#的行和包含#号却不在开头的行。

#系统版本
version=v1.0.0

#系统平台
platform=arm
#数据库信息

database=127.0.0.1;3306;123456;mysql
@1234
#https端口
httpsport=8443
8443#dd
#用于开启https的设置
enablehttps=false

#插入数据库是否携带服务名称
is.add.name=false
#设备型号
model=RTD-1

首先以可读写的方式打开文件并使用换行符来遍历文件。通过特定条件筛选出可用行并将其写入新文件中最后修改新创建的文件完成处理。

package 

import (
	"bufio"
	"io"
	"log"
	"os"
	"strings"
)

const (
	FILE = "hello.conf"
	NEWFILE = "hellonew.conf"
)

func main() {
	deleteBadLine()
}

func deleteBadLine() {
	//以可读写方式打开文件
	file, err := os.OpenFile(FILE, os.O_RDWR, 0666)
	if err != nil {
		log.Fatal(err)
	}
	defer file.Close()

	//创建一个文件并以可读写方式打开
	destFile, err := os.OpenFile(NEWFILE, os.O_CREATE | os.O_RDWR, 0666)
	if err != nil {
		log.Fatal(err)
	}
	defer destFile.Close()

	//将文件内容写入缓冲区中
	reader := bufio.NewReader(file)

	for {
		//以换行符来遍历文件
		line, err := reader.ReadString('\n')
		if err != nil {
			log.Fatal(err)
		}

		//读到文件结尾
		if err == io.EOF {
			break
		}

		//根据特定条件筛选行
		if len(line) == 0 || line == "\r\n" || !strings.Contains(line, "=") && !strings.Contains(line, "#") || strings.Contains(line, "#") && !strings.HasPrefix(line, "#") {
			log.Println("Bad line:", line)
			continue
		} else {
			log.Println("Normal line:", line)
			//将可用的行写入新文件
			if _, err = destFile.WriteString(line); err != nil {
				log.Fatal(err)
			}
		}
	}
	//处理完毕将新创建的文件重命名
	//linux系统可以通过重命名来覆盖静态文件若其他系统则需要先进行删除或备份再重命名
	os.Rename(NEWFILE, FILE)
}

3. 处理后的文本文件

#系统版本
version=v1.0.0
#系统平台
platform=arm
#数据库信息
database=127.0.0.1;3306;123456;mysql
#https端口
httpsport=8443
#用于开启https的设置
enablehttps=false
#插入数据库是否携带服务名称
is.add.name=false
#设备型号
model=RTD-1

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: go