[sf-lug] On learning regular expressions
asheesh at asheesh.org
Mon Dec 29 14:45:58 PST 2008
On Mon, 29 Dec 2008, Michael Paoli wrote:
>> Date: Sun, 14 Dec 2008 18:12:12 -0800 (PST)
>> From: Asheesh Laroia <asheesh at asheesh.org>
>> On Sun, 14 Dec 2008, Jesse Zbikowski wrote:
>>> Forget about the regular expression capabilities in the standard Unix
>>> commands unless you are a masochist.
>> Or (my preference) get used to demand "E"xtended regular expressions.
>> $ grep -E
>> $ sed -r
>> Those two give you a perl-ish modern set of regular expressions where you
>> don't find yourself cursing the tool for being stuck in 1988. It's
>> probably not "full" perl-compatible regular expressions, but I've always
>> been happy with how close it is.
>> I firmly believe we need to stop teaching "grep and sed" and start
>> teaching people to use "grep -E and sed -r".
> Actually, egrep and grep -E are "just" extended regular expressions.
Yes, but with that comes syntax and escaping changes; switching from one
to another drives me batty. For example:
The way I expect things (sed with -r):
paulproteus at vellum:~ $ echo roflcon | sed -r 's/(co)n/\1pter/'
Or, the way that I get by accident sometimes (sed without -r):
paulproteus at vellum:~ $ echo roflcon | sed 's/(co)n/\1pter/'
sed: -e expression #1, char 15: invalid reference \1 on `s' command's RHS
bash: echo: write error: Broken pipe
To which I reply:
paulproteus at vellum:~ $ Come ON sed, you frickin' knew what I meant!
You can get the same frustration by using 'grep' instead of 'egrep' (AKA
I'm not even going to say how to make this work for sed without -r (which
is equivalent to grep without -E) since this is a Linux users group, and
we all use GNU tools here, so let's just ditch the aging past and stop
remembering the bad old days and extra scary \ characters.
Let's just end the plague of backslashes from the past and do egrep and
You will overcome the attacks of jealous associates.
More information about the sf-lug