Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: bug with sed and escaping?



On Wed, 10 Apr 2013 11:43:02 +0200
Dino Ruic <dr@xxxxxxxxxxxxxxxxxxx> wrote:
> Zsh:
> $ echo "xy" | sed -e s/^x//
> zsh: no matches found: s/^x//

The "^" is doing a form of enhanced file name generation: what you've
typed means "match all files that start with 's/' and then continue with
anything that isn't 'x//'", which obviously isn't what you want.  If
you're not using the additional pattern matching features of ^, ~, #, |
and parentheses as documented in the zshexpn manual page, you can
"unsetopt extendedglob".  It's not on by default, so something in your
initialisation files is setting it.

Generally, however, you really need to decide if you actually need raw
Bourne shell stuff to work --- in which case it's possible to get zsh to
emulate it more fully, but in that case you might be better off with a
shell that does it by default, depending what it is you're trying to do
--- or if all you want is to learn how zsh works and adapt to it.  In
the latter case, quoting is the right way to go in this particular case.

(I'd actually recommend single quotes --- it'll work in this case with
double quotes, but expressions involving '^' also have a meaning to
history expansion, so single quotes are a bit safer.  This is probably
week 3 of the beginner's zsh class rather than week 1 :-).)

pws



Messages sorted by: Reverse Date, Date, Thread, Author