Why don't you use the expand_template method for file editing? M
Jesse Becker wrote: > On Tue, Mar 02, 2010 at 08:33:15AM -0500, nwat...@symcor.com wrote: >> I don't think there is a function at present for string search a replace >> actions out side of file editing. Perhaps look at it from a higher level. >> Why is string manipulation needed? > > There are two reasons, one specific, and one general. > > The specific reason is that I am trying to build a somewhat more robust > template library (which if I ever get to work, I will post to the list). > > To do this, I am trying to convert a file from the form of > "/some/path/to/file" into something like > "/path/to/repo/_some_path_to_file". > > This is trivial with two regexes. Using quasi-cfengine notation, and > a hypothetical regreplace(string,find,replace) function, something like > this would work: > > vars: > "orig" = "/some/path/to/file"; > "new" = regreplace( > regreplace("${orig}", "/", "_" ), > "^", > "/path/to/repo" > ); > > > > The general reason is that string search and replace is a very useful > tool. It doesn't really matter the what the specific problem actually > is, since this is a more general issue. A good tool is useful in lots > of different situations, including those in which it was not originally > intended. > > There have been several occasions where a simple string replacement would > make certain promises simpler, but I have attempted to work around them. > But having to shell out and make two calls to outside binaries--one > of them being echo!--just to do a simple string manipulation seems > counter-productive, inefficient, and much more error prone (especially > due to the hazards of shell quoting). > > Here's another example, albeit slightly contrived. You have a system > where you want to start hashing user home directories in the form of > "jbecker -> /home/j/jbecker" (for example). Based on some > list of users, there is a set of promises to ensure that the accounts > exist, including calling 'useradd'. Having a short set of promises to > convert the string "jbecker" into "/home/j/jbecker" is fairly easy using > a search and replace function. I can envision a situation where > cfengine could actually handle the migration of existing "unhashed" user > home directories to "hashed" ones, but only if it supports better string > handling routines. > > Of course, one can always just hand off a username to a Perl script as > well. > > I really want is a general solution (which is why I did not simply ask > how to munge a path). Once I--and everyone else--has that, the > specifics should be simple. :) > > > -- Mark Burgess ------------------------------------------------- Professor of Network and System Administration Oslo University College, Norway Personal Web: http://www.iu.hio.no/~mark Office Telf : +47 22453272 ------------------------------------------------- _______________________________________________ Help-cfengine mailing list Help-cfengine@cfengine.org https://cfengine.org/mailman/listinfo/help-cfengine