search and replace string from a script
System
root at ttsi.lonestar.org
Thu Apr 25 14:07:51 AEST 1991
In article <1991Apr23.215804.8366 at iwarp.intel.com> merlyn at iwarp.intel.com (Randal L. Schwartz) writes:
>In article <1991Apr23.180034.7349 at progress.com>, root at progress (Root of all Evil) writes:
>| Is there any way within ex (or some other text processing utility) to
>| access the nth occurrence of a pattern? What I'd like to do is search
>| a file for the nth occurrence of a pattern and then change that pattern
>| but no others. I've tried using ex:
>|
>| ex -s FILE << QUIT
>| /STRING1/n s/STRING1/STRING2/
>| wq!
>| QUIT
>|
>| but this only places me n lines after the first occurrence of STRING1.
>| Any ideas? I'd like to avoid writing to a temporary file.
>
>perl -pe '/STRING1/ && (++$n == 20) && s/STRING1/STRING2/' <in >out
>
>OK, so the syntax is cryptic; do it C-like if you want:
>
>perl -pe 'if (/STRING1/ && (++$n == 20)) { s/STRING1/STRING2/; }' <in >out
>
>or even (more verbosely):
>
>perl -pe 'if (/STRING1/) { s/STRING1/STRING2/ if ++$n == 20; }' <in >out
>
>(well, maybe not more verbosely, then... :-) Or even:
>
>perl -pe 's/STRING1/STRING2/ if /STRING1/ && (++$n == 20);' <in >out
>
>All of these presume "20" is your magic occurance. Season to taste.
>
>print "Just another Perl hacker," # Perl is available from all GNU sites...
These all presume only one occurrence or first occurrence per line.
Is that the requirement? How would you handle counting multiple
occurrences per line in perl? Thanks for posting the solutions above.
--
Mark S. Evans Tandem Telecommunications Systems Inc.
Phone: 214-516-6201 850 E. Central Parkway
Fax: 214-516-6801 Plano, TX 75074
Mail: mse at ttsi.lonestar.org
More information about the Comp.unix.shell
mailing list