Icholy Replace Save

Streaming text replacement for Go

Project README

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 https://github.com/golang/go/issues/49117.
Open Source Agenda is not affiliated with "Icholy Replace" Project. README Source: icholy/replace
Stars
67
Open Issues
1
Last Commit
1 year ago
Repository
License
MIT

Open Source Agenda Badge

Open Source Agenda Rating