用文件中的模式替换字符串

replace string with patterns in file

我使用 sed 替换 *.go 文件中的变量 sed -i 's/\<old_name\>/newName/g' *.go 我的 objective 是为了消除 golinter 错误。 具有常见模式的字符串如何,例如将 1 替换为 2

  1. fmt.Printf("blah blah blah")fmt.Printf("yadda yadda yadda")
  2. fmt.Println("blah blah blah")fmt.Println("yadda yadda yadda")

在这种情况下,我们不想替换: 1. fmt.Printf("print speed= %d",speed) //所以这里的关键是结束模式应该是")。 2. log.Printf语句 //只替换"fmt." 对此有任何指示吗?

我对你的问题有点困惑,但我认为你正在尝试执行以下操作:

replace      printf("yada yada yada") with println("yada yada yada")
not replace  printf("print speed = %d", speed)

如果是这样的话,我会做类似下面的事情:

sed -i '/Printf(\".*\")/ s/Printf/Println/g' *.go

在您真正想要使用格式的地方应该保持完整。这是一个例子:

[sborza@msandn]:~$ cat tester.go
package main

import "fmt"

func main() {
        speed = 1
        fmt.Printf("vim-go")
        fmt.Printf("speed = %d\n", speed)
}

[sborza@msandn]:~$ sed '/Printf(\".*\")/ s/Printf/Println/g' tester.go
package main

import "fmt"

func main() {
        speed = 1
        fmt.Println("vim-go")
        fmt.Printf("speed = %d\n", speed)
}

gofmt -w -r "printf -> println" .

注意做这个之前先备份文件