通过Go中的自定义io.Writer编辑敏感数据

I am executing some exec.Commands that output sensitive data. I want to filter this data out. Since you can set the stdout writer to the Command struct, my idea is to write a custom io.Writer that basically consumes the output and filters the output by a given word.

type passwordFilter struct {
    keyWord string
}

func (pf passwordFilter) Write(p []byte) (n int, err error) {
    // this is where I have no idea what to do
    // I think I should somehow use a scanner and then filter
    // out = strings.Replace(out, pf.keyWord, "*******", -1)
    // something like this
    // but I have to deal with byte array here
}

func main() {
    pf := passwordFilter{keyWord: "password123"}
    cmd := exec.Command(someBinaryFile)
    cmd.Stdout = pf
    cmd.Stderr = &stderr
    if err := cmd.Run(); err != nil {
        log.Fatal(err)
    }
}

I'm not sure if I'm headed the right way here, but I'm sure I can somehow reuse the existing io.Writers or scanners here.

Use Cmd.StdoutPipe to get a reader on the program output. Use a scanner on that reader.

cmd := exec.Command(someBinaryFile)
r, err := cmd.StdoutPipe()
if err != nil {
    log.Fatal(err)
}
if err := cmd.Start(); err != nil {
    log.Fatal(err)
}
s := bufio.NewScanner(r)
for s.Scan() {
    out := s.String() 
    out = strings.Replace(out, pf.keyWord, "*******", -1)
    // write out to destination
}
if s.Err() != nil {
    log.Fatal(s.Err())
}
if err := cmd.Wait(); err != nil {
    log.Fatal(err)
}