From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14035 invoked by alias); 26 Nov 2015 21:48:16 -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: 21000 Received: (qmail 19343 invoked from network); 26 Nov 2015 21:48:14 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.0 X-Authority-Analysis: v=2.1 cv=X+5rdgje c=1 sm=1 tr=0 a=Uh/wpEIUX9UX0FOdpsyW1Q==:117 a=Uh/wpEIUX9UX0FOdpsyW1Q==:17 a=N659UExz7-8A:10 a=L4hhvHMeoThUTON9LEAA:9 a=pILNOxqGKmIA:10 Message-id: <56577711.4050202@eastlink.ca> Date: Thu, 26 Nov 2015 13:18:09 -0800 From: Ray Andrews User-Agent: Mozilla/5.0 (X11; Linux i686; rv:31.0) Gecko/20100101 Icedove/31.7.0 MIME-version: 1.0 To: zsh-users@zsh.org Subject: Re: convert sed to zsh References: <56574625.308@eastlink.ca> <151126121744.ZM5731@torch.brasslantern.com> In-reply-to: <151126121744.ZM5731@torch.brasslantern.com> Content-type: text/plain; charset=windows-1252; format=flowed Content-transfer-encoding: 7bit On 11/26/2015 12:17 PM, Bart Schaefer wrote: > On Nov 26, 9:49am, Ray Andrews wrote: > } Subject: convert sed to zsh > } > } sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g" > } > } Here's my candidate zsh: > } > } bar=$foo//$'\x1B'\[([0-9](#c0,2)(;[0-9](#c0,2))#)#[mGK]/} > > That's a parse error, you're missing the opening curly brace. Right. An edit-in-place error. Gotta be more careful about those they waste people's time. > > You can write $'\x1B' as $'\e' for clarity. > > Why change {1,2} in sed to (#c0,2) in zsh? (#c1,2) should work. I'm working from expressions taken verbatim and on faith, but that seem to either very slightly 'disagree' with each other, or to have different sets of codes they'll work with, or one is sightly sloppier than the other, so I'm being careful. There could be syntax in one where no match is acceptable, but an error in the other or some such. I know for most things zsh just uses different symbols vis a vis regex, but there's logic changes too so gotta be alert. > > } ... so far it's working, but I'm nervous about it. In another context > } it seems I have to backslash the semi-colon, but here it seems ok either > } way, but of course it should be one or the other. > > "Of course"? I don't want to guess. If I backslash it will be because it's required. > > The reason both ';' and '\;' work there has to do with the properties > of patterns rather than the properties of semicolons. Semicolon is a > command terminator but otherwise is not special, so you need to protect > a literal semicolon only from command parsing [such as inside $(...)]. Ah, so the backslash is acceptable but not required in the way that you can backslash near anything. > > } The 'sed' is of course the kosher way (I believe) of removing color > } codes and various other escapes like "\e[K" that seem to hang around > } colorized output of 'grep' and so on. > > I'm not quite an expert on color codes but the zsh expression should > do the same as the sed (modulo 1,2 vs. 0,2 as noted and assuming you > have extendedglob set). I do know that there are other escapes (cursor > movements, overstriking, etc.) that won't match this expression, but > probably you never encounter those in the usage you expect. Yeah, just colors, for now, anyway. I'm working from Sebastian's stuff, which started out being able to filter colors, but not the ' \e[K' thing that grep adds. So I added a separate filter for that, but the 'sed' expression seems robust enough to handle that along with the color codes. So I'm reverse engineering that back to zsh syntax. The sed expression has an obvious robustness about it--you can see that it will handle any color code that I know of, anyway. Your edits in place and all good, thanks. >