[mdlug] Another sed/regex question

Carl T. Miller carl at carltm.com
Fri Sep 26 20:01:01 EDT 2014


Jeff Hanson wrote:
> Have a input with mixed lines of data, some desirable, some not.  Valid
> lines have a particular text and digit pattern which needs to be extracted
> (very predictable).  If a line contains a particular number then it is
> output encapsulated by one set of ASCII terminal escape codes for setting
> text color.  If it has a non-matching number then it is output with a
> different set of codes.  I need something like:
>
> program_output | sed
> s/match_pattern/MATCHCODE_cleaned-up_output_RESETCODE
> !NOMATCHCODE_cleaned-up_output_RESETCODE
>
> I'm not sure how to combine the match/no-match replacements in one
> operation.  Currently I'm using:
>
> program_output | sed
> -ne s/match_pattern/MATCHCODE_cleaned-up_output_RESETCODE/p
> -ne
> /match_pattern/!{s/valid_data_pattern/NOMATCHCODE_cleaned-up_output_RESETCODE/p}

Jeff, I'm having trouble visualizing what you're trying to do.
Can you send some sample bogus data before and after running sed?
Maybe something like this?

Code1 good data
Code2 bad data
Code1 more good data

Esc[0;32;mgood dataEsc[0;30;m
Esc[0;31;mbad dataEsc[0;30;m
Esc[0;32;mmore good dataEsc[0;30;m

> I know this can be done in one line of awk/perl/whatever but I'm trying to
> avoid additional dependencies.

Hmm.  You are doing this in a single instance of sed, so I
would call what you have a one-liner.  If you're going for
speed, what you have will probably run quicker than a one-liner
in awk or perl.

c




More information about the mdlug mailing list