为了账号安全,请及时绑定邮箱和手机立即绑定

Golang:在文件中查找字符串并显示行号

Golang:在文件中查找字符串并显示行号

Go
小唯快跑啊 2022-01-10 16:41:24
read, err := ioutil.ReadFile(path)if err != nil {    return err}if strings.Contains(string(read), "STRING") {    // display line number?    // what if many occurrences of the string    // how to display for each the line number?}我正在尝试在文件中搜索特定字符串并显示该字符串所在的行号。
查看完整描述

3 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

使用扫描仪逐行迭代文件,增加每个循环的行数。


例如


f, err := os.Open(path)

if err != nil {

    return 0, err

}

defer f.Close()


// Splits on newlines by default.

scanner := bufio.NewScanner(f)


line := 1

// https://golang.org/pkg/bufio/#Scanner.Scan

for scanner.Scan() {

    if strings.Contains(scanner.Text(), "yourstring") {

        return line, nil

    }


    line++

}


if err := scanner.Err(); err != nil {

    // Handle the error

}

更新:如果您需要跨“数千个文件”执行此操作(根据另一个答案的评论),那么您可以将此方法包装在工作池中并同时运行。


查看完整回答
反对 回复 2022-01-10
?
森林海

TA贡献2011条经验 获得超2个赞

嗨试试这个。


    /* ioutil.ReadFile returns []byte, error */

    data, err := ioutil.ReadFile("output.txt")

    /* ... omitted error check..and please add ... */

    /* find index of newline */

    file := string(data)

    line := 0

    /* func Split(s, sep string) []string */

    temp := strings.Split(file, "\n")


    for _, item := range temp {

        fmt.Println("[",line,"]\t",item)

        line++

    }

基本上,它将使用 ioutil 包读取文件并从内容中找出换行符。当您找到某个字符或换行符等时,字符串包非常有用。查看 GO 的官方网页以获取更多说明和示例。(https://golang.org/pkg/strings/#Split)。


我从上面的(https://golang.org/pkg/strings/#Split)制作了一个“output.txt” ,预期的输出应该是


[ 0 ]    

[ 1 ]    Examples

[ 2 ]    

[ 3 ]        Contains

[ 4 ]        ContainsAny

[ 5 ]        Count

[ 6 ]        EqualFold

[ 7 ]        Fields

[ 8 ]        FieldsFunc

[ 9 ]        HasPrefix

[ 10 ]       HasSuffix

...

关于格式,您可以 fmt.Println("[",line,"]\t",item)使用 fmt.Printf(


查看完整回答
反对 回复 2022-01-10
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

首先将文件分成几行(可以使用strings.Splitor完成bytes.Split),然后遍历各行并单独检查每一行是否包含所需的字符串。如果是,则打印行号。


查看完整回答
反对 回复 2022-01-10
  • 3 回答
  • 0 关注
  • 349 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信