如何搜索包含特定文本字符串的文件?

时间:2010-03-29 04:41:56

标签: search msbuild

如何使用MSBuild搜索包含特定文本字符串的文件?

3 个答案:

答案 0 :(得分:3)

谢谢你们!感谢您的所有快速回复! 我试过Grep,但我需要读取xml文件才能看到结果。

我刚刚发现我们可以在MSBuild扩展包中使用任务FilterByContent,它可以直接导致属性和属性。项目。如果您需要,我想将它分享给您。使用示例如下:

<Target Name="ttt">
  <ItemGroup>
    <files Include="d:\temp\test\**" />
  </ItemGroup>
  <MSBuild.ExtensionPack.FileSystem.File TaskAction="FilterByContent" RegexPattern="abbcc" Files="@(files)" >
    <Output TaskParameter="IncludedFileCount" PropertyName="out"/>
  </MSBuild.ExtensionPack.FileSystem.File>
  <Message Text="ttt:$(out)" />
</Target>

南。

答案 1 :(得分:1)

您可以在CodePlex上的MSBuild Contrib项目中找到“grep”任务。但是我自己没有用过它。

答案 2 :(得分:1)

目前尚不清楚是否要在名称或文件本身中搜索文本。

如果您只是想要一个文件列表,其名称与特定(简单)标准相匹配,我建议使用ItemGroup这样:

  

来自MSBuild Contrib项目的Grep tak看起来像这样

<PropertyGroup>
  <MSBuildContribCommonTasksAssembly>$(MSBuildExtensionsPath)\MSBuildContrib\MSBuildContrib.Tasks.dll</MSBuildContribCommonTasksAssembly>
</PropertyGroup>

<UsingTask TaskName="MSBuildContrib.Tasks.Grep" AssemblyFile="$(MSBuildContribCommonTasksAssembly)" Condition="Exists('$(MSBuildContribCommonTasksAssembly)')" />

<ItemGroup>
   <FilesToSearch Include="**\*.cs" />
</ItemGroup>

<!-- very simple search -->
<Grep InputFiles="@(FilesToSearch )" OutputFile="out.xml" Pattern="Error" />

<!-- slightly more complicated search (search and extract info) -->
<Grep InputFiles="@(FilesToSearch )" 
  OutputFile="out.xml" 
  Pattern="// (?'Type'TODO|UNDONE|HACK): (\[(?'Author'\w*),(?'Date'.*)\])? (?'Text'[^\n\r]*)"  />

Grep任务将生成out.xml文件,该文件随后可用于从中读取信息并在构建过程中使用。