Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: input foo, output '[F|f][O|o][O|o]'?
- X-seq: zsh-users 17846
- From: "TJ Luoma" <luomat@xxxxxxxxx>
- To: ZyX <kp-pav@xxxxxxxxx>
- Subject: Re: input foo, output '[F|f][O|o][O|o]'?
- Date: Mon, 01 Jul 2013 20:58:26 -0400
- Cc: "Zsh-Users List" <zsh-users@xxxxxxx>
- Dkim-signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d= messagingengine.com; h=from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-type; s=smtpout; bh=SMdEOWKN+X1NzgezQ4cnLTHMmpQ=; b=o3UMAzpKIZ+DeRoMyV9T59ucytYx xLTOZ2ejKpUJoIuTXfrXhTIX/VHY3/KHa6+hTBbLoZQ87sAFf6Kr2DJ3e52jnKa1 FeBpqF+CGdzLnu0MEpn9cHGdPgEWY88pIidZP3WxN5/nLSU6ssMx3U4btiUXoKlp CVW4d4Vi0V71vFE=
- In-reply-to: <694051372704284@web26e.yandex.ru>
- List-help: <mailto:zsh-users-help@zsh.org>
- List-id: Zsh Users List <zsh-users.zsh.org>
- List-post: <mailto:zsh-users@zsh.org>
- Mailing-list: contact zsh-users-help@xxxxxxx; run by ezmlm
- References: <694051372704284@web26e.yandex.ru>
On 1 Jul 2013, at 14:44, ZyX wrote:
I do not think you will find a way to do this. All regex engines
(precisely, programs that are using them) I know support a way to set
case sensitivity for the whole regular expression and some support
toggling this for a part of regular expression. In grep this is an -i
switch, for vim it is either /i or \c/\C, for sed this is /i, for PCRE
and perl this is additionally (?i) "atom" (additionally to other ways
of toggling the behavior which are highly dependent on programs
embedding PCRE; for perl this is usual /i flag). Even zsh globs do
support (#i).
Phil Pennock's version worked great:
% foo=CrashPlan
% for c in ${(s::)foo}; do print -n "[${(U)c}|${(L)c}]";done; print
[C|c][R|r][A|a][S|s][H|h][P|p][L|l][A|a][N|n]
%
By the way, what regex engine is your output for? Any I am aware of
parse "[N|n]" as "either one of three characters: N, n, or pipe".
Really? I can think of several that support it. Maybe it's because I'm
old enough to remember when a lot of these utilities didn't have 'ignore
case'
% echo "foo\nbar\nbat" | egrep -v '[F|f]'
bar
bat
% echo "foo\nbar\nbat" | sed 's#[F|f][O|o][O|o]#XXX#g'
XXX
bar
bat
You can also use it for matching case/esac :
case "$i" in
[C|c][R|r][A|a][S|s][H|h][P|p][L|l][A|a][N|n])
echo "matched crashplan"
;;
*)
echo "No Match"
;;
esac
I am also assuming XY problem here: what for do you need such
conversion? You should consider lowercasing the tested string if
nothing like -i is available.
It's for use with the AddDescription directive for .htaccess which (from
what I understand) takes its case sensitivity from the underlying
filesystem when matching filenames. There's no "ignore case" flag or
anything else that I can use with it, so my only option (at least, the
only one I can think of) is the one that I suggested. For example, if I
wanted to add this for any files which start with 'BBEdit' (case
insensitive) this is what I'd need to use:
AddDescription "<a href='http://barebones.com/bbedit'>A text editor
that doesn't suck</a>" [B|b][B|b][E|e][D|d][I|i][T|t]*
I verified that it works, but typing that stuff manually is tedious and
highly error prone, which made it the perfect place for a shell script
:-)
TjL
Messages sorted by:
Reverse Date,
Date,
Thread,
Author