除了 mc0e 提供的正则表达式解决方案之外,一旦您找到带有文件名的字符串,您可以通过以下方式对它们进行管道传输:
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