Заменить строку с шаблонами в файле

Я использовал sed для замены переменных в файлах *.go, используя sed -i 's/\<old_name\>/newName/g' *.goМоя цель состоит в том, чтобы устранить ошибки 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." Есть какие-нибудь указатели на это?

2 ответа

Решение

Я немного смущен вашим вопросом, но думаю, что вы пытаетесь сделать следующее:

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" .

Обратите внимание, что сделать резервную копию файла, прежде чем сделать это.

Другие вопросы по тегам