[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: funny...

Steve Reindl wrote:
> OK so I'm stupid. How do I get "hello world" out of this?

sed '/^[when][coders]/!d
' /usr/share/dict/words

sed '/^[when][coders]/!d;/^...[discover].$/d;/^..[real].[code]$/!
d' /usr/share/dict/words

1. Start with the dictionary file (lots of words) (/usr/share/dict/words).
On Solaris, this file is in /usr/share/lib/dict/words.
2. Run a sed filter on it.
3. Out pops "hello world". :=)

To explain step 2, for the sed-impaired or the synaptically challenged:
1. Patterns are bounded by "/" characters, followed by a command.
2. The command is applied to the lines matching the pattern.
3. "//d" would mean "get rid of the matches"
4. "//!d" would mean "keep only the matches" (i.e. get rid of the non-matches).
5. /usr/share/dict/words is a file of words, one word per line.

Now the sed regexes, one by one:
A. /^[when][coders]/!d ==> keep words that start with "w", "h", "e", or "n",
and then followed by a "c", "o", "d", "e", "r", or an "s".

   $ sed '/^[when][coders]/!d' /usr/share/dict/words

[898 words total, "HEllo" and "WOrld" are among them.]

B. /^...[discover].$/d ==> get rid of five letter words with any letter in
the word "discover" as the fourth character of the word.

   $ sed '/^[when][coders]/!d;/^...[discover].$/d' /usr/share/dict/words

[840 words total, "helLo" and "worLd" are NOT among them.]

C. /^..[real].[code]$/!d ==> keep only five letter words with a r, e, a, or l
in the third character and c, o, d, or e as the last character.

[</drumroll> ... 2 words total, and "heLlO" and "woRlD" are they.]




To unsubscribe, send email to majordomo@silug.org with
"unsubscribe silug-discuss" in the body.