View on GitHub


Useful template functions for Go templates.

String Functions

Sprig has a number of string manipulation functions.


The trim function removes space from either side of a string:

trim "   hello    "

The above produces hello


Remove given characters from the front or back of a string:

trimAll "$" "$5.00"

The above returns 5.00 (as a string).


Trim just the suffix from a string:

trimSuffix "-" "hello-"

The above returns hello


Convert the entire string to uppercase:

upper "hello"

The above returns HELLO


Convert the entire string to lowercase:

lower "HELLO"

The above returns hello


Convert to title case:

title "hello world"

The above returns Hello World


Remove title casing. untitle "Hello World" produces hello world.


Repeat a string multiple times:

repeat 3 "hello"

The above returns hellohellohello


Get a substring from a string. It takes three parameters:

substr 0 5 "hello world"

The above returns hello


Remove all whitespace from a string.

nospace "hello w o r l d"

The above returns helloworld


Truncate a string (and add no suffix)

trunc 5 "hello world"

The above produces hello.


Truncate a string with ellipses (...)


abbrev 5 "hello world"

The above returns he..., since it counts the width of the ellipses against the maximum length.


Abbreviate both sides:

abbrevboth 5 10 "1234 5678 9123"

the above produces ...5678...

It takes:


Given multiple words, take the first letter of each word and combine.

initials "First Try"

The above returns FT

randAlphaNum, randAlpha, randNumeric, and randAscii

These four functions generate random strings, but with different base character sets:

Each of them takes one parameter: the integer length of the string.

randNumeric 3

The above will produce a random string with three digits.


Wrap text at a given column count:

wrap 80 $someText

The above will wrap the string in $someText at 80 columns.


wrapWith works as wrap, but lets you specify the string to wrap with. (wrap uses \n)

wrapWith 5 "\t" "Hello World"

The above produces hello world (where the whitespace is an ASCII tab character)


Test to see if one string is contained inside of another:

contains "cat" "catch"

The above returns true because catch contains cat.

hasPrefix and hasSuffix

The hasPrefix and hasSuffix functions test whether a string has a given prefix or suffix:

hasPrefix "cat" "catch"

The above returns true because catch has the prefix cat.

quote and squote

These functions wrap a string in double quotes (quote) or single quotes (squote).


The cat function concatenates multiple strings together into one, separating them with spaces:

cat "hello" "beautiful" "world"

The above produces hello beautiful world


The indent function indents every line in a given string to the specified indent width. This is useful when aligning multi-line strings:

indent 4 $lots_of_text

The above will indent every line of text by 4 space characters.


The nindent function is the same as the indent function, but prepends a new line to the beginning of the string.

nindent 4 $lots_of_text

The above will indent every line of text by 4 space characters and add a new line to the beginning.


Perform simple string replacement.

It takes three arguments:

"I Am Henry VIII" | replace " " "-"

The above will produce I-Am-Henry-VIII


Pluralize a string.

len $fish | plural "one anchovy" "many anchovies"

In the above, if the length of the string is 1, the first argument will be printed (one anchovy). Otherwise, the second argument will be printed (many anchovies).

The arguments are:

NOTE: Sprig does not currently support languages with more complex pluralization rules. And 0 is considered a plural because the English language treats it as such (zero anchovies). The Sprig developers are working on a solution for better internationalization.


Convert string from camelCase to snake_case.

Introduced in 2.12.0.

snakecase "FirstName"

This above will produce first_name.


Convert string from snake_case to CamelCase

Introduced in 2.12.0.

camelcase "http_server"

This above will produce HttpServer.


Convert string from camelCase to kebab-case.

kebabcase "FirstName"

This above will produce first-name.


Shuffle a string.

Introduced in 2.12.0.

shuffle "hello"

The above will randomize the letters in hello, perhaps producing oelhl.


Returns true if the input string mratches the regular expression.

regexMatch "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}" ""

The above produces true


Returns a slice of all matches of the regular expression in the input string

regexFindAll "[2,4,6,8]" "123456789 

The above produces [2 4 6 8]


Return the first (left most) match of the regular expression in the input string

regexFind "[a-zA-Z][1-9]" "abcd1234"

The above produces d1


Returns a copy of the input string, replacing matches of the Regexp with the replacement string replacement. Inside string replacement, $ signs are interpreted as in Expand, so for instance $1 represents the text of the first submatch

regexReplaceAll "a(x*)b" "-ab-axxb-" "${1}W"

The above produces -W-xxW-


Returns a copy of the input string, replacing matches of the Regexp with the replacement string replacement The replacement string is substituted directly, without using Expand

regexReplaceAllLiteral "a(x*)b" "-ab-axxb-" "${1}"

The above produces -${1}-${1}-


Slices the input string into substrings separated by the expression and returns a slice of the substrings between those expression matches. The last parameter n determines the number of substrings to return, where -1 means return all matches

regexSplit "z+" "pizza" -1

The above produces [pi a]

See Also…

The Conversion Functions contain functions for converting strings. The String Slice Functions contains functions for working with an array of strings.