从ruby移植到go:在文件中查找和替换

时间:2018-03-26 23:38:12

标签: ruby go

我正在将一些ruby代码移植到golang。我很难在下面的线上找到一个好的等价物,并想知道是否有人知道比我下面的更好的解决方案。基本前提是在文件中找到一条有很多空格的行并删除该行。

我还想过使用exec来调用sed -i,但是当我尝试它时它不起作用,而下面的内容最终起作用。

红宝石:

File.write(filename, File.read(filename).gsub(/^\s*$/,""))

Golang:

b, err := ioutil.ReadFile(filename)
if err != nil {
    return
}

// I happen to know that there will be at least 30 spaces,
// but I would really prefer to not use a hardcoded value here.
// I was just never able to make using '^\s*$' work in the regex.

r := regexp.MustCompile(`[ ]{30,}`)  // there's a space in the []
newb := r.ReplaceAll(b, []byte(""))
err = ioutil.WriteFile(filename, newb, 0666)
if err != nil {
    fmt.Printf("Unable to write to file (%+v)\n", err)
    return
}

1 个答案:

答案 0 :(得分:5)

启用多线模式,您的原始模式将起作用:

r := regexp.MustCompile(`(?m)^\s*$`)

使用字符串进行演示:https://play.golang.org/p/6TsfgB83WgX