aboutsummaryrefslogtreecommitdiff
path: root/bin/trs.awk
diff options
context:
space:
mode:
Diffstat (limited to 'bin/trs.awk')
-rw-r--r--bin/trs.awk35
1 files changed, 35 insertions, 0 deletions
diff --git a/bin/trs.awk b/bin/trs.awk
new file mode 100644
index 00000000..fbb7eeba
--- /dev/null
+++ b/bin/trs.awk
@@ -0,0 +1,35 @@
+# Substitute one string for another in input (no newlines, no regex)
+BEGIN {
+ # Name self
+ self = "trs"
+
+ # 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(msg) {
+ stderr = "cat >&2"
+ printf "%s: %s\n", self, msg | stderr
+ close(stderr)
+ 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
+}