Remember that a regex, by default, is "greedy". IOW, it matches as much as is 
possible. So with the "CD.*QR" pattern, you match from the first CD until the 
__last__ QR it can find. Not the first QR it can find. You would need the "non 
greedy" regex "CD.*?QR" . However, it is unfortunate that IBM, in its 
POSIX-inspired blindness, does not implement "non greedy" regular expressions. 
I can't get this to work in either awk or sed. But, if you have the Ported 
Tools available, then you have a older version of perl. It can do what you want.

example:
$cat test.txt
QQQQABCDEFGNOPQRXXXPPPPABCDEFGNOPQRYYYOOOOABCDEFGNOPQRZZZ
QQQQABCDEFGNOPQRXXXPPPPABCDEFGNOPQRYYYOOOOABCDEFGNOPQRZZZ
QQQQABCDEFGNOPQRXXXPPPPABCDEFGNOPQRYYYOOOOABCDEFGNOPQRZZZ
QQQQABCDEFGNOPQRXXXPPPPABCDEFGNOPQRYYYOOOOABCDEFGNOPQRZZZ
QQQQABCDEFGNOPQRXXXPPPPABCDEFGNOPQRYYYOOOOABCDEFGNOPQRZZZ
QQQQABCDEFGNOPQRXXXPPPPABCDEFGNOPQRYYYOOOOABCDEFGNOPQRZZZ
$perl -np -e 's/CD.*?QR/junkt/' test.txt                                        
                                                                                
           
QQQQABjunktXXXPPPPABCDEFGNOPQRYYYOOOOABCDEFGNOPQRZZZ
QQQQABjunktXXXPPPPABCDEFGNOPQRYYYOOOOABCDEFGNOPQRZZZ
QQQQABjunktXXXPPPPABCDEFGNOPQRYYYOOOOABCDEFGNOPQRZZZ
QQQQABjunktXXXPPPPABCDEFGNOPQRYYYOOOOABCDEFGNOPQRZZZ
QQQQABjunktXXXPPPPABCDEFGNOPQRYYYOOOOABCDEFGNOPQRZZZ
QQQQABjunktXXXPPPPABCDEFGNOPQRYYYOOOOABCDEFGNOPQRZZZ

Where the leading "$" is my shell prompt character.

I crossposted this replay to MVS-OE for their viewing pleasure. <grin>

--
John McKown 
Systems Engineer IV
IT

Administrative Services Group

HealthMarkets(r)

9151 Boulevard 26 * N. Richland Hills * TX 76010
(817) 255-3225 phone * 
john.mck...@healthmarkets.com * www.HealthMarkets.com

Confidentiality Notice: This e-mail message may contain confidential or 
proprietary information. If you are not the intended recipient, please contact 
the sender by reply e-mail and destroy all copies of the original message. 
HealthMarkets(r) is the brand name for products underwritten and issued by the 
insurance subsidiaries of HealthMarkets, Inc. -The Chesapeake Life Insurance 
Company(r), Mid-West National Life Insurance Company of TennesseeSM and The 
MEGA Life and Health Insurance Company.SM

 

> -----Original Message-----
> From: IBM Mainframe Discussion List 
> [mailto:IBM-MAIN@bama.ua.edu] On Behalf Of Ken MacKenzie
> Sent: Monday, February 06, 2012 8:44 AM
> To: IBM-MAIN@bama.ua.edu
> Subject: Regular Expressions (OMVS)
> 
> Hi All,
> 
> I'm not sure if this is the appropriate forum, please point 
> me to the correct one if it's not.
> 
> I'm playing around with regular expressions and I want to 
> achieve the following.  I spoke to a Unix geek but he didn't 
> really understand what I was asking.
> 
> Given the following sample data, I want discover only the 
> first occurrence of any string which matches my regexp.
> QQQQABCDEFGNOPQRXXXPPPPABCDEFGNOPQRYYYOOOOABCDEFGNOPQRZZZ
> QQQQABCDEFGNOPQRXXXPPPPABCDEFGNOPQRYYYOOOOABCDEFGNOPQRZZZ
> QQQQABCDEFGNOPQRXXXPPPPABCDEFGNOPQRYYYOOOOABCDEFGNOPQRZZZ
> QQQQABCDEFGNOPQRXXXPPPPABCDEFGNOPQRYYYOOOOABCDEFGNOPQRZZZ
> QQQQABCDEFGNOPQRXXXPPPPABCDEFGNOPQRYYYOOOOABCDEFGNOPQRZZZ
> QQQQABCDEFGNOPQRXXXPPPPABCDEFGNOPQRYYYOOOOABCDEFGNOPQRZZZ
> 
> I tried: awk 'sub(/CD.*QR/,"junkt")' fxdata in an attempt to 
> change QQQQABCDEFGNOPQRXXX to QQQQABjunktXXX but instead, it 
> takes the final occurrence of QR, and returns QQQQABjunktZZZ. 
> Notice the ZZZ on the end instead of XXX.
> 
> This is being driven from a REXX exec in ISPF, if any of the 
> above is not clear, I will try to explain further.
> 
> ----------------------------------------------------------------------
> For IBM-MAIN subscribe / signoff / archive access instructions,
> send email to lists...@bama.ua.edu with the message: INFO IBM-MAIN
> 
> 

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@bama.ua.edu with the message: INFO IBM-MAIN

Reply via email to