Search & Replace Issue

Garrett Cooper youshi10 at u.washington.edu
Sun Dec 24 12:13:10 PST 2006


Jack Stone wrote:
>
>
>
>> From: Parv <parv at pair.com>
>> To: Josh Paetzel <josh at tcbug.org>
>> CC: Jack Stone <antennex at hotmail.com>, freebsd-questions at freebsd.org
>> Subject: Re: Search & Replace Issue
>> Date: Sun, 24 Dec 2006 02:56:32 -0500
>>
>> in message <200612232230.58352.josh at tcbug.org>,
>> wrote Josh Paetzel thusly...
>> >
>> > On Saturday 23 December 2006 21:29, Jack Stone wrote:
>> > > Appreciate a tip on how to search & replace  hundreds of *.htm
>> > > files:
>> > > >From this:
>> > >
>> > > <li><a href="http://www.domain.com/tales/wouf.html
>> > > To this:
>> > > <li><a href="tales/wouf.html
>> > >
>> >
>> > perl -p0777i -e 's/http:\/\/www.domain.com\///g' *.htm
>>
>> Is -0777 really necessary (causes whole file to be stored in
>> memory)?  But that is not really the point of this reply.
>>
>> Above is a fine opportunity to use alternative delimiters (and to
>> restrict the matching (only to link URLs)) ...
>>
>>   perl -pi -e 's!(?<=href=")\Qhttp://www.domain.com!!g' *.html
>>
>>
>> ... in case of "hundreds of *.htm", use xargs(1) pipeline ...
>>
>>   find  dir-of-HTML-files  -type f -name '*.html' -print0 \
>>   | xargs -0 perl -pi -e 's!(?<=href=")\Qhttp://www.domain.com!!g'
>>
>>
>> Feel free to change Perl version with sed (the version of sed with
>> -i option[0]) one ...
>>
>>   find ... \
>>   | ... sed -i -e 's,\(href="\)http://www\.domain\.com,\1,g'
>>
>>
>>   [0] That makes this reply on point.
>>
>>
>>   - Parv
>>
>
> Parv and all:
> Many thanks for these various tips and your time to make them!
>
> I usually use sed(1) myself, but for the life of me, I could not find 
> a way to properly apply delimiters or syntax to get it to work. I was 
> close, but no cigar! Too many slashes and commas I guess.
>
> Such a "tool" will indeed be a giant timesaver!
>
> Merry Xmas!
>
> All the best,
> Jack

    One thing with regular expressions though, is that you can control 
the command characters to use with defining the search and replace 
keywords and replacements. If you see my example, I used pipes because 
you had a number of forward slashes (/), so it allows you to cut down on 
the number of escaping backslashes in your regular expression / replacement.
    Cheers and a Merry Christmas to you too!
-Garrett


More information about the freebsd-questions mailing list