Skip to content

icholy/replace

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

98 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Streaming text replacement

GoDoc

This package provides a x/text/transform.Transformer implementation that replaces text

Example

package main

import (
	"io"
	"os"
	"regexp"

	"github.com/icholy/replace"
)

func main() {
	f, _ := os.Open("file")
	defer f.Close()

	r := replace.Chain(f,
		// simple replace
		replace.String("foo", "bar"),
		replace.Bytes([]byte("thing"), []byte("test")),

		// remove all words that start with baz
		replace.Regexp(regexp.MustCompile(`baz\w*`), nil),

		// surround all words with parentheses
		replace.RegexpString(regexp.MustCompile(`\w+`), "($0)"),

		// increment all numbers
		replace.RegexpStringFunc(regexp.MustCompile(`\d+`), func(match string) string {
			x, _ := strconv.Atoi(match)
			return strconv.Itoa(x+1)
		}),
	)

	_, _ = io.Copy(os.Stdout, r)
}

Notes Regexp* functions

  • RegexpTransformer is stateful and cannot be used concurrently.
  • The replace functions should not save or modify any []byte parameters they recieve.
  • If a match is longer than MaxMatchSize it may be skipped (Default 2kb).
  • For better performance, reduce the MaxMatchSize size to the largest possible match.
  • Do not use with transform.Chain, see golang/go#49117.

About

Streaming text replacement for Go

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages