Re: OT: matched string of a regular expression



kamaraju kusumanchi wrote:
Consider the following file.

cat junk.txt
a(i)1b
a(j)1b
a(ij)1b
a(ji)1b
a(ijk)1b
a(jik)1b
a(ikj)1b
a(jki)1b
a(kij)1b
a(kji)1b

In general the file is very long, might contain some other text. Now,
I would like to replace all the occurrences of

a(ijk)1b with a(ijk)23b
a(jik)1b with a(jik)23b
a(ikj)1b with a(ikj)23b
and so on for all the strings such as a(???)

Because of the size of the files involved, the number of files on
which I have to perform this operation I decided to use sed (instead
of doing it manually in vim)

However my sed script currently involves 6 lines (for all the
combinations of ijk) such as

s/a(ijk)1b/a(ijk)23b/g
s/a(jik)1b/a(jik)23b/g
s/a(ikj)1b/a(ikj)23b/g
and so on

This method is very cumbersome, not scalable. If I have to do similar
operations on a(ijklm) the script would be 120 lines! Is there any way
to write something like

s/a(???)1b/a(???)23b/g

where the second ??? is the string matched by the first regular
expression.

In general, how can I obtain the string that is matched by a regular
expression (in a shell script)?

BTW, Is sed the right tool for this kind of job? If not, can you
suggest any other tool that will get the job done in less time?

PS: Please include my email in the CC.

thanks
raju



assuming foo.dat has:
cat foo.dat
a(i)1b
a(j)1b
a(ij)1b
a(ji)1b
a(ijk)1b
a(jik)1b
a(ikj)1b
a(jki)1b
a(kij)1b
a(kji)1b

Then
$> sed -e 's/\(a(.*)\)1b/\123b/' foo.dat > foo_new.dat

Or just:
$> sed -e 's/1b/23b/' foo.dat > foo_new.dat

if only 1b is to be replaced. Same thing using perl (will replace
contents of foo.dat inplace):
$> perl -p -i -e "s/1b/23b/g;" foo.dat


Regards
--

Please reply to this list only. I read this list on its corresponding
newsgroup on gmane.org. Replies sent to my email address are just
filtered to a folder in my mailbox and get periodically deleted without
ever having been read.


--
To UNSUBSCRIBE, email to debian-user-REQUEST@xxxxxxxxxxxxxxxx
with a subject of "unsubscribe". Trouble? Contact listmaster@xxxxxxxxxxxxxxxx



Relevant Pages

  • Re: OT: matched string of a regular expression
    ... However my sed script currently involves 6 lines (for all the ... how can I obtain the string that is matched by a regular ... To UNSUBSCRIBE, email to debian-user-REQUEST@xxxxxxxxxxxxxxxx ... Trouble? ...
    (Debian-User)
  • OT: matched string of a regular expression
    ... However my sed script currently involves 6 lines (for all the ... is the string matched by the first regular ... how can I obtain the string that is matched by a regular ... To UNSUBSCRIBE, email to debian-user-REQUEST@xxxxxxxxxxxxxxxx ...
    (Debian-User)
  • RE: matched string of a regular expression
    ... Subject: OT: matched string of a regular expression ... However my sed script currently involves 6 lines (for all the ... To UNSUBSCRIBE, email to debian-user-REQUEST@xxxxxxxxxxxxxxxx ...
    (Debian-User)
  • Re: [opensuse] SED help
    ... Open the file in Kate and do a search and replace on the string indexFRMB01C001 and replace it with indexFRMB01C002 ... Randall S wrote a killer script that would add quotes to some text so i am trying to modify that script and use it but not having much luck. ... To unsubscribe, e-mail: opensuse+unsubscribe@xxxxxxxxxxxx ... For additional commands, e-mail: opensuse+help@xxxxxxxxxxxx ...
    (SuSE)
  • Re: Sencha Touch--Support 2 browsers in just 228K!
    ... this particular script is so awful that anyone who could ... These functions are available on every String object. ... if (!dom) { ... @param o The object with the attributes ...
    (comp.lang.javascript)