3

我需要在成百上千的静态文件中进行相当多的正则表达式搜索/替换。我正在寻找建立一个审计跟踪,所以我至少知道哪些文件被哪些搜索/替换所触及。

我可以在 Notepad++ 中进行正则表达式搜索,它会为我提供文件名/路径和每个文件中的命中数。它还为我提供了我不太关心的#s 行。

我真正想要的是文件名/路径的单独文本文件。每个文件中的命中数将是一个很好的补充,但实际上它只是我所追求的文件名/路径的列表。

在 Notepad++ 的搜索结果窗格中,我可以右键单击并复制,但这包括所有的行#s 和代码,这太吵了,尤其是当你得到数百个匹配项时。

任何人都知道如何将这些结果仅用于文件名/路径?我追求的是:

/about/foo.html
/about/bar.html
/faq/2012/awesome.html
/faq/2013/awesomer.html
/foo/bar/baz/wee.html
etc.

然后我可以将该文件命名为 regex_whatever_search.txt,并在其顶部包含用于搜索和替换的正则表达式。在此之下,我列出了它所触及的文件列表。

更新看起来最简单的事情(至少我发现)是将所有搜索结果复制到一个新的文本文件中并运行以下正则表达式:

^\t线。+$

并将其替换为空字符串。这将为您提供文件路径和命中计数,每个条目之间有很多空白空间。然后运行以下正则表达式:

\s+\n

并替换为:

\n

这将去除所有不需要的空白空间,您将得到一个不错的列表。

4

3 回答 3

1

The regulat expression I use for this kind of problem is

 ^\tLine.[0-9]*:.

And it works for me

于 2013-10-29T08:02:27.860 回答
1

也许您需要强大的 unix 工具

假设您在 c:\tools\ gnuwin32中安装了 GNUWin32

比如果您有包含该内容的 replace.bat 文件:

@echo off
set BIN=c:\tools\gnuwin32\bin
set WHAT=%1
set TOWHAT=%2
set MASK=%3

rem Removing quotes
SET WHAT=###%WHAT%###
SET WHAT=%WHAT:"###=%
SET WHAT=%WHAT:###"=%
SET WHAT=%WHAT:###=%

SET TOWHAT=###%TOWHAT%###
SET TOWHAT=%TOWHAT:"###=%
SET TOWHAT=%TOWHAT:###"=%
SET TOWHAT=%TOWHAT:###=%

SET MASK=###%MASK%###
SET MASK=%MASK:"###=%
SET MASK=%MASK:###"=%
SET MASK=%MASK:###=%



echo %WHAT% replaces to %TOWHAT%

rem printing matching files
%BIN%\grep -r -c "%WHAT%" %MASK%

rem actual replace
%BIN%\find %MASK% -type f -exec %BIN%\sed -i "s/%WHAT%/%TOWHAT%/g" {} + 

您可以使用所需的输出递归地在屏蔽文件中进行正则表达式替换

replace "using System.Windows" "using Nothing" *.cs
于 2013-02-21T21:17:10.303 回答
1

如果您有可用的 Excel 并希望避免使用正则表达式,则此方法效果很好:

  1. Ctrl+A 选择所有结果
  2. 将选定的结果拖放到 Excel
  3. 在第一行创建过滤器
  4. 过滤掉第一列有“(空白)”的行
  5. 选择剩余的行(即带有文件名的行)并将它们复制/粘贴到另一张纸或任何想要的目的地

您也可以 Ctrl+A、Ctrl+C 搜索结果,然后在 Excel 中使用粘贴选项“使用文本导入向导”,说数据是“固定宽度”并在第二个字符后放置一个换行符(删除导入期间文件名中的两个前导空格),并使用过滤器过滤掉不需要的行。

于 2019-12-10T18:35:06.317 回答