Dave continues with his shell-script L33t translator.
In my last
article, I talked about the inside jargon of hackers and computer geeks
known as "Leet Speak" or just "Leet". Of course, that's a shortened version
of the word Elite, and it's best written as L33T or perhaps L337 to be
ultimately kewl. But hey, I don't judge.
Last time I looked at a series of simple letter substitutions that allow
convert a sentence like "I am a master hacker with great
skills" into something like this:
I AM A M@ST3R H@XR WITH GR3@T SKILLZ
It turns out that I missed some nuances of Leet and didn't realize that
most often the letter "a" is actually turned into a "4", not
an "@", although as with just about everything about the jargon,
it's somewhat random.
In fact, every single letter of the alphabet can be randomly tweaked and
changed, sometimes from a single letter to a sequence of two or three
symbols. For example, another variation on "a" is "/-\" (for
what are hopefully visually obvious reasons).
Continuing in that vein, "B" can become "|3", "C" can become "[",
"I" can become "1", and one of my favorites, "M" can
change into "V". That's a lot of work, but since one of the
goals is to have a language no one else understands, I get it.
There are additional substitutions: a word can have its trailing "S"
replaced by a "Z", a trailing "ED" can become
"'D" or just "D", and another interesting one is that words
containing "and", "anned" or "ant" can have that
sequence replaced by an ampersand (&).
Let's add all these L337 filters and see how the script is shaping up.
But First, Some Randomness
Since many of these transformations are going to have a random element,
let's go ahead and produce a random number between 1–10 to figure
out whether to do one or another action. That's easily done with the
doit=$(( $RANDOM % 10 )) # random virtual coin flip
Now let's say that there's a 50% chance that a -ed suffix is going
to change to "'D" and a 50% chance that it's just going to become
"D", which is coded like this:
if [ $doit -ge 5 ] ; then
word="$(echo $word | sed "s/ed$/d/")"
word="$(echo $word | sed "s/ed$/'d/")"
Let's add the additional transformations, but not do them every time.
Let's give them a 70–90% chance of occurring, based on the transform
itself. Here are a few examples:
if [ $doit -ge 3 ] ; then
word="$(echo $word | sed "s/cks/x/g;s/cke/x/g")"
if [ $doit -ge 4 ] ; then
word="$(echo $word | sed "s/and/\&/g;s/anned/\&/g;
And so, here's the second translation, a bit more sophisticated:
$ l33t.sh "banned? whatever. elite hacker, not scriptie."
B&? WH4T3V3R. 3LIT3 H4XR, N0T SCRIPTI3.
Note that it hasn't realized that "elite" should become L337 or
L33T, but since it is supposed to be rather random, let's just leave this
script as is. Kk? Kewl.
If you want to expand it, an interesting programming problem is to break
each word down into individual letters, then randomly change lowercase to
or vice versa, so you get those great ransom-note-style WeiRD LeTtEr
Next time, I plan to move on, however, and look at the great command-line
tool youtube-dl, exploring how to use it to download videos and even
just the audio tracks as MP3 files.