[EMAIL PROTECTED] wrote:
>Message: 1 >Date: Wed, 03 Apr 2002 11:28:32 -0800 >From: Bruce Timberlake <[EMAIL PROTECTED]> >Subject: Re: [cobalt-developers] find and replace shell script > >Matthew Nuzum wrote: > >>Can anyone suggest a command that I can use in a shell script that will >>help me do a find and replace action on a couple of thousand XML files? >> >>I need to replace something like http://domain.com/images with just >>/images and it can occur several times in the same file. >> >>Unfortunately, due to the nature of XML, many of the files don't contain >>a single carriage return, just one very long line. >> > >I don't know if sed has a problem with long lines or not, but you could >try this: > >cat file.xml | sed "s/http\:\/\/domain\.com\/images/\/images/g" > >newfile.xml > >(All the "\" are to "escape" the regular slashes, punctuation, etc, so >they won't be interpreted by the shell...) Then newfile.xml would be the >modified file with "/images" and file.xml would still be your original >data with the "http://domain.com/images"... > >HTH! > >-- >Bruce Timberlake >Sun Cobalt Technology Engineer >Sun Microsystems, Inc. > > >--__--__-- > >Message: 2 >Date: Wed, 3 Apr 2002 21:25:21 +0200 >From: Nico Meijer <[EMAIL PROTECTED]> >Subject: Re: [cobalt-developers] find and replace shell script > >Hi Matt, > >>Can anyone suggest a command that I can use in a shell script that will >>help me do a find and replace action on a couple of thousand XML files? >> > >Try `sed`. Be sure to pipe each parsed file into a new file and then rename the newly >created file to the original filename or your files will be lost. > >Make backups first... Nico > > >--__--__-- > This might also help, done starting at the root of where the files may be expected to occur: find . -type f -exec perl -p -i.bak -e 's!http://(.*\.?)domain.com/images!/images!g' {} \; This is a find(1L) command, looking for normal files, and on each executing (-exec) the perl(1) one-liner (by way of the -e) to edit the file given to the exec function (via the {} ) in-place (-i), making a backup (with the extension .bak), looking thru the file (via the -p), executing a substitution (s) for all instances on the line (g), using the '!' as a seperator, replacing "http://" followed by zero or more of any character, followed by 0 or 1 '.', followed by "domain.com/images/" with the string "/images/". (Single quotes were necessary above to prevent the shell from attempting to interpret the '!'s, although another character could also be used as a seperator for the values in the substitution.) While YMMV, I hope that helps. -Albert C. _______________________________________________ cobalt-developers mailing list [EMAIL PROTECTED] http://list.cobalt.com/mailman/listinfo/cobalt-developers
