0

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

  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 statements //仅替换“fmt”。对此有任何指示吗?

4

2 回答 2

0

我对您的问题感到有些困惑,但认为您正在尝试执行以下操作:

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)
}
于 2017-07-06T01:45:22.647 回答
0

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

请注意,在执行此操作之前制作备份文件。

于 2017-07-06T06:15:18.827 回答