aboutsummaryrefslogblamecommitdiff
path: root/bin/trs.awk
blob: 5966c520817201541e11e593924a120608aaf589 (plain) (tree)



































                                                                           
# Substitute one string for another in input (no regex)
BEGIN {
    # Name self
    self = "trs"

    # No wordsplitting required
    FS = ""

    # Two and only two arguments required
    if (ARGC != 3)
        fail("Need a string and a replacement")

    # Get arguments and blank them so awk doesn't try to read them as files
    str = ARGV[1]
    rep = ARGV[2]
    ARGV[1] = ARGV[2] = ""

    # String length is relevant here
    if (!(len = length(str)))
        fail("String to replace cannot be null")
}

# Bailout function
function fail(str) {
    printf "%s: %s\n", self, str | "cat >&2"
    exit(2)
}

# Run on each line
{
    lin = ""
    for (buf = $0; ind = index(buf, str); buf = substr(buf, ind + len))
        lin = lin substr(buf, 1, ind - 1) rep
    lin = lin buf
    print lin
}