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