Bash Substitutes for “seq” and Simple “sed” Expressions
There are two things I find myself doing from the shell just infrequently enough that I can’t remember the exact syntax. The first is generating a sequence and the second is repeated string transformation.
“seq” is a little GNU utility that generates sequences of numbers. I used to find this installed automatically by many Linux distributions, but lately (on Debian and Ubuntu, at least) it’s missing and I haven’t been sufficiently motivated to find it. No need: Bash has something good enough built in.
To generate the numbers from 1 to 10, inclusive:
$ echo {1..10} 1 2 3 4 5 6 7 8 9 10
The second thing is repeated string transformations, for example renaming a set of files to use a different file extension. This used to mean re-reading the sed(1) man page yet again and doing the transformation in a backtick expression. Again, no need: Bash can do this itself:
$ for f in a.foo b.foo c.foo; do echo $f ${f/%foo/bar}; done a.foo a.bar b.foo b.bar c.foo c.bar
The syntax is ${parameter/pattern/replacement}. pattern only replaces the first match, unless it starts with /, in which case it replaces all matches. It can also start with # to force a match at the beginning of the string or % to match at the end.
Take a look at “Parameter Expansion” in the Bash manual for several other useful operations.