Search/Replace in multiple files
<?xml version="1.0"?> <xsharper xmlns="http://www.xsharper.com/schemas/1.0"> <versionInfo value="Search/Replace in multiple text files" Version="0.1.0.0" Copyright="(C) 2009 DeltaX Inc." /> <usage options="ifNoArguments default autoSuffix" /> <param name="filter" required="true" value="file filter to search, for example *.txt" /> <param name="search" required="true" value="what to search" /> <param name="replace" value="with what to replace" default="" /> <param /> <param synonyms="d" switch="directory" default="." value="Directory where to start searching" /> <param synonyms="r" switch="recursive" count="none" default="0" unspecified="-1" value="Scan all subdirectories" /> <param synonyms="i" switch="ignoreCase" count="none" default="0" unspecified="-1" value="Ignore case" /> <param switch="regex" count="single" unspecified="" description="regex-options" value="Treat search and replace as regular expressions." /> <param synonyms="e" switch="encoding" value="Force encoding (utf-8/ascii/utf-16/windows-1252/...)" /> <param synonyms="w" switch="write" count="none" value="Write files. If this switch is not specified, script will just print filenames." /> <param synonyms="nb" switch="nobackup" count="none" value="Do not create backup copies (w/o this key file.ext~ are created for all modified files)." /> <setAttr actionId="dir" recursive="${recursive}" /> <setAttr actionId="r" options="multiline|${regex|=null}" /> <set count="0" /> <dir id="dir" from="${directory}" filter="${filter}"> <readText from="${from}" encoding="${encoding|=null}" outTo="original" /> <if isSet="regex"> <regex id="r" pattern="${search}" replace="${replace}" options="multiline" value="${original}" outTo="changed" /> <else> <set name="changed" value="${=$original.Replace($search,$replace)}" /> </else> </if> <if isNotZero="${=string.Compare($original,$changed)}"> <print>${from}</print> <if isSet="write"> <if isNotSet="nobackup"> <copy from="${from}" to="${from}.~" overwrite="always" /> </if> <writeText to="${from}" encoding="${encoding|=null}" value="${changed}" /> </if> <code> c.Set("count",c.GetInt("count")+1) </code> </if> </dir> <!-- Example of using if/else construction in C# --> <code> if (c.IsSet("write")) <print outTo="$info">${count} files were changed.</print> else <print outTo="$info">${count} files found.</print> </code> </xsharper>