From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8092 invoked by alias); 2 Jul 2013 00:58:56 -0000 Mailing-List: contact zsh-users-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Users List List-Post: List-Help: X-Seq: 17846 Received: (qmail 21852 invoked from network); 2 Jul 2013 00:58:52 -0000 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,DKIM_VALID,FREEMAIL_FROM,NML_ADSP_CUSTOM_MED,RCVD_IN_DNSWL_LOW autolearn=no version=3.3.2 Received-SPF: neutral (ns1.primenet.com.au: 66.111.4.25 is neither permitted nor denied by SPF record at _netblocks3.google.com) 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= X-Sasl-enc: HJJlZnxgCPTetqOqRlEixaYacQXj8r8xVOSPly4WOJRb 1372726722 From: "TJ Luoma" To: ZyX Cc: "Zsh-Users List" Subject: Re: input foo, output '[F|f][O|o][O|o]'? Date: Mon, 01 Jul 2013 20:58:26 -0400 Message-ID: In-Reply-To: <694051372704284@web26e.yandex.ru> References: <694051372704284@web26e.yandex.ru> MIME-Version: 1.0 Content-Type: text/plain; format=flowed X-Mailer: MailMate (1.5.4r3323) 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 text editor that doesn't suck" [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