我们可以从文件中找到一个模式的字节偏移量
“ grep -ob模式文件名”;
但是,grep
是不安全的utf8
。
如何在Go中找到模式的字节偏移?该文件是进程日志,可以以TB为单位。
这就是我想要进入Go的内容:
$ cat fname
hello world
findme
hello 世界
findme again
...
$ grep -ob findme fname
12:findme
32:findme
答案 0 :(得分:1)
FindAllStringIndex(s string, n int)返回表达式的所有连续匹配的字节开始/结束索引(即切片):
DestroyMenu()
输出:
[[12 18] [32 38]]
注意:我是在Microsoft Windows上执行此操作的,但是以UNIX格式(换行)保存了文件;如果输入文件以Windows格式保存(回车和换行),则字节偏移量将分别增加到13和35。
更新:对于大文件,请使用bufio.Scanner;例如:
package main
import "fmt"
import "io/ioutil"
import "regexp"
func main() {
fname := "C:\\Users\\UserName\\go\\src\\so56798431\\fname"
b, err := ioutil.ReadFile(fname)
if err != nil {
panic(err)
}
re, err := regexp.Compile("findme")
if err != nil {
// handle error
}
fmt.Println(re.FindAllStringIndex(string(b), -1))
}
输出:
12
32