我正在将一些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
}
答案 0 :(得分:5)
启用多线模式,您的原始模式将起作用:
r := regexp.MustCompile(`(?m)^\s*$`)
使用字符串进行演示:https://play.golang.org/p/6TsfgB83WgX