mc0e が提供する regexp ソリューションに加えて、ファイル名を含む文字列を見つけたら、次のようにパイプすることができます。
package main
import (
"bufio"
"fmt"
"os"
"path/filepath"
)
func checkLine(s string) bool {
// Insert regex checking logic here. Just checking for blank line now.
if s == "" {
return false
}
return true
}
func srcerer(s string) (string, error) {
p, err := filepath.Abs(s)
if err != nil {
return "", err
}
return "src:///" + p, nil
}
func main() {
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
v := scanner.Text()
if checkLine(v) {
link, err := srcerer(v)
if err != nil {
fmt.Fprintln(os.Stderr, "Error:", err)
return
}
fmt.Println(link)
}
}
if err := scanner.Err(); err != nil {
fmt.Fprintln(os.Stderr, "reading standard input:", err)
}
return
}
上記のコードを と呼ばれるバイナリにコンパイルし、内容をsrc-links
含む と呼ばれるファイルを指定すると、次のようになります。testlines.txt
./test.go:14: undefined: erre
./test.go:16: undefined: erre
./test.go:21: undefined: erre
./test.go:27: undefined: erre
コマンドcat testlines.txt | src-links
は次のように出力します。
src:///home/icholy/gocode/src/test/test.go:14: undefined: erre
src:///home/icholy/gocode/src/test/test.go:16: undefined: erre
src:///home/icholy/gocode/src/test/test.go:21: undefined: erre
src:///home/icholy/gocode/src/test/test.go:27: undefined: erre