掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 3405|回复: 31

[工具] PowerGrep 学ing 汇总贴

[复制链接]

该用户从未签到

发表于 2017-11-17 21:43:10 | 显示全部楼层 |阅读模式
本帖最后由 zhu1234 于 2017-11-24 19:02 编辑
! N4 A- C3 Z+ @7 z$ e5 p! h  W" r' A( }( L
http://www.powergrep.com) A+ g- O8 C& U3 B" W
最强大的 Windows  GREP 工具
/ I. f# Z% H+ W: C
5 Y* Y1 A: ?: H, d1 r* [PowerGREP 是一个功能强大的Windows grep工具。能够快速搜索 PC 或网络上的大量文件, 电脑内存有多大,它就能预览多大的文件。若不预览,则能处理硬盘有多大就有多大的巨量文件。包括文本和二进制文件、压缩的存档、 MS Word 文档、 Excel 电子表格、 PDF 文件、 OpenOffice 文件等,使用功能强大的正则表达式来查找所需的信息。能够批量搜索和替换,可用于维护网站、源代码、报表等大型数据集中,并用于统计信息和知识。
7 a# D  ~$ N* d( k* r( a
4 s: A; G: X8 a3 B1 A* J
PowerGrep 跟 MDX 有何关系?
7 j: J2 H. O) q5 A  X6 Q( t之前个人制作的部分mdx多多少少用到了这个神器的一些功能。一直觉得PG强大无比,值得学透,但很多细节还没搞清楚,效率不高。' x8 `% E( }! P, V+ S0 [8 H1 f) H

* p9 h8 c. w. j& @' B" z5 L软件说明共202篇,每天蜗牛 1-2 篇,3个月内爬完。, l5 ~4 X8 R5 _2 Z% n/ M4 p

! a  C2 L9 n( O2 r8 Y$ {. V
' n  ^. w! F8 t! d  r# P6 c5 [& O1 l
action.html
3 l, q  G; d  r9 i* I" N% l* `, i4 y+ Q0 K+ V
Action Reference操作参考  ~7 N: w5 z' L* R8 ]2 X( Z5 o
& D3 b$ u( v6 q7 \' G) p7 E
"操作" 面板是定义 PowerGREP 将执行的任务的位置。操作面板使用动态用户界面。与当前操作的无关的选项将不可见。这样可以减少杂乱和混乱, 并留下更多的空间来输入搜索字词的长列表。由于更改某些选项将使其他选项相关或无关, 因此更改选项可能会导致操作面板更改其外观。: J4 y- e1 t, l2 I6 X
操作面板上的所有选项都被安排为**部分。在执行操作时, 部件按 PowerGREP 使用它们的顺序从上到下布局。某些部件无法用于某些操作类型。因此, 当定义一个动作时, 从顶部选择动作类型开始。然后从上到下, 通过操作面板工作。( ?% Y' A( C$ J4 s3 p0 `7 m8 Q4 d  p
% W3 G  l4 A4 ]( a5 q
1. Action type: 动作类型: 告诉 PowerGREP 要执行的操作: "simple search", "search", "collect data", "count matches", "list files", "file or folder name search", "file or folder name collect", "rename files or folders", "search and replace", "search and delete", "merge files", or "split files". "简单搜索 "、" 搜索 "、" 收集数据 "、" 计数匹配 "、" 列表文件 "、" 文件或文件夹名称搜索 "、" 文件或文件夹名称收集 "、" 重命名文件或文件夹 "、" 搜索和替换 "、" 搜索和删除 “、"合并文件" 或 "拆分文件"。在选择操作类型时, 此部分中会显示特定于某些操作类型的选项。某些操作类型比它们的名称更灵活。例如, "列表文件" 和 "rename files and folders重命名文件和文件夹" 操作类型也可以在选择"list files目标类型"时复制文件。
6 W3 o6 d9 Z% ~8 z. \% u+ r2. Filter files: 筛选文件: 在对文件执行实际操作之前, 请搜索该文件的内容, 以确定是否应处理或跳过此文件。由于命名的捕获组将从筛选部分继承到以下所有部分, 因此您还可以使用 "筛选器文件" 功能捕获该文件的一部分文本, 以便在该操作的以下部分中使用。"筛选器文件" 部分可用于除 "简单搜索" 之外的所有操作类型。5 g7 O& f" X- g& b& M4 ^1 r3 }, O
3. File sectioning: 文件剖切: 您可以仅通过每个文件的一部分来进行主要的操作搜索, 或者按所需的方式拆分每个文件, 而不是一次搜索整个文件。一个常见的选择是按行处理文件。 适用于除  "rename files or folders重命名文件或文件夹" 之外的所有操作类型。' d0 d* B) c6 x0 P6 B
4. Main action: 主要操作: 操作的主要部分是执行您在"action type"动作类型" 部分中选择的操作的搜索字词集。所有操作类型都有一个主要部分。除 "list files列表文件"、"file or folder name collect文件或文件夹名称收集" 和 "merge files合并文件" 之外的所有操作类型都需要在操作的主要部分中有一个搜索字词。当您将操作类型设置为 "simple search简单搜索" 时, 操作的主要部分是您可以输入搜索字词的唯一部分。5 b6 v4 C5 Y& s: @6 @3 A
5. Extra processing: 额外处理: 仅用于 "collect data收集数据"、"file or folder name collect文件或文件夹名称收集"、"search and replace搜索和替换"、"rename files or folders重命名文件或文件夹" 和操作。您可以对替换文本或要在主操作中收集的文本应用额外的搜索和替换。
2 p4 [4 x: I! D6. Context: 上下文: 如果您使用操作的 "context上下文" 部分来收集该上下文, PowerGREP 可以在"Results panel结果面板"上的每个搜索匹配项**围显示额外的上下文。仅用于显示在文件内容中找到的搜索匹配项的操作类型。$ V$ j8 J: U2 N. v& o9 B# I
7. Between collected text: 在收集的文本之间: 指定是否应使用特定的文本分隔收集到目标文件中的搜索匹配项, 以及目标文件是否应具有页眉或页脚文本。仅用于 "search搜索"、"collect data收集数据"、"file or folder name collect文件或文件夹名称收集" 和 "merge files合并文件" 操作类型, 并且当 "target file creation目标文件创建" 设置为 "do not save results to file不将结果保存到文件” 时不可使用。0 E# _4 A2 R/ V/ F, S2 }
8. Target and backup files: 目标和备份文件: 告诉 PowerGREP 应在何处保存收集的搜索匹配, 是否要修改原始文件或创建一组新的目标文件, 或者是否要复制、**或删除列出的文件。可用的选项依赖于动作类型, 甚至可以改变其功能。例如, 选择 "delete matching files删除匹配文件" 的目标类型与 "list files列表文件" 操作类型相结合, 实际上将操作更改为 "delete files删除文件" 操作。只有 "simple search简单搜索" 根本没有任何目标选项。
9 d. \/ t/ P4 A6 b; l9. Comments: 注释: 在将该操作”adding添加"到 "PowerGREP Library PowerGREP 库”或 "saving it into an action file将其保存到操作文件中"之前, 请输入对其用途的说明。
' d6 G7 |& i6 C完成定义操作后, 请使用 "操作" 菜单中的 "Preview预览"、"Execute执行" 或 "Quick Execute快速执行" 项来执行它。"Preview预览"项目是最安全的, 因为它永远不会修改任何文件, 或做任何其它你可能会后悔的事。* P2 p; V1 [- j6 R: P
"操作" 工具栏上与 "Execute执行" 和 "Quick Execute快速执行" 菜单项对应的按钮将更改其标签, 以指示将发生的情况。每当更改"action type操作类型”或”target type目标类型"时, 标签都会更改。例如, 当操作类型为 "重命名文件" 时, 根据目标类型是否为 "Rename重命名文件" 或 "Copy复制文件", "Execute执行" 更改为 "rename files重命名" 或 "copy files复制文件”。

评分

2

查看全部评分

该用户从未签到

 楼主| 发表于 2017-12-7 05:31:58 | 显示全部楼层
Action Types# t* V: [6 a5 Z
* {! s& S  l" F3 j
在 "Action panel 操作面板"上要做的第一件事是使用 "action type 动作类型" 下拉列表来选择要执行的操作种类。操作类型主要定义了在 "操作面板" 上可用的设置。操作类型和target type目标类型的组合决定了 PowerGREP 对main part of the action操作的主要部分或找到这些匹配项的文件所执行的搜索匹配的作用。PowerGREP 提供十二种操作类型:+ k3 w8 |% A- W% o+ b2 u: r
1. Simple search
' c. L# l. B0 Q5 _# T2. Search; t1 S' p1 X* o6 V9 Y" E9 `. I
3. Collect data
$ o  ]6 l+ X! [* A4. Count matches
7 m) @/ n+ F+ N5 L0 u3 w5. List files
. s4 G2 q" U* d: s$ q  S6. File or folder name search
8 O3 j* ]  Q; C- F: S4 p7. File or folder name collect
8 Y  \0 A* H4 c% J0 a8. Rename files or folders
0 p0 p# T! a9 C. w: p6 S6 c9. Search and replace
7 k' Z+ W& `: P- s) O# i10. Search and delete. W  t0 k. m- f, W
11. Merge files1 P! q4 O0 Z8 h+ @1 c
12. Split files
* q% W& o: u) L# V1 _3 jSimple Search
( S6 Y9 g5 V" K$ S! e
8 I2 E1 [& q( H, P$ w4 A4 @
2 h/ u* h6 V: ]) O- h, K6 p$ a+ R* ^& h"简单搜索" 操作类型隐藏了通常为操作面板提供复杂外观的大多数控件。如果只想通过一组文件搜索一个或多个搜索字词, 并在 PowerGREP 中查看结果, 请使用此操作类型。"简单搜索" 和 "搜索" 之间的主要区别在于, "简单搜索" 不支持筛选文件或创建目标文件, 而file sectioning文件剖切和context上下文仅提供 "off" 和 "line by line" 之间的选择。: r( E. H# ~% C# V
Group Identical Matches 组相同的匹配
$ N8 M2 y! a* B1 p6 y1 w
; _% f2 y. L* `4 }# |! V打开只收集相同的搜索匹配一次。关闭以列出所有搜索匹配项, 包括相同的匹配项。在Group Identical Matches时, 编辑器将不突出显示源文件中的匹配项, 结果将显示不带上下文的匹配项。
# n) ?" z/ k7 {* S9 c5 e, yList Only Files Matching All Terms 仅列出与所有术语匹配的文件: ]0 b/ }1 g* D5 L' Y" U: U" L9 f
打开以列出或处理与所有搜索字词匹配的文件。关闭以列出或处理匹配一个或多个搜索字词的所有文件。仅当操作的主要部分的搜索类型为 list 列表或 delimited set of search terms 分隔的搜索字词集时, 此选项才可用。0 \2 q) [" i. [8 \: e
Search 搜索9 {8 y! g8 L& i$ a

! p* C: @' |. p8 y* j4 ]; ["搜索" 操作类型扩展了 "简单搜索" 和其他功能。您可以使用 "filter files筛选文件" 操作部分排除在其中找到一个或多个搜索字词的文件。实质上, 您可以通过对 a 的操作搜索的主要部分和对 b 的file filtering文件筛选搜索来搜索匹配 "A and not B" 的文件。操作面板的 "文件剖分" 和 "上下文" 部分还显示了它们的全套选项。在 "操作" 面板的底部, 可以设置target and backup options目标和备份选项, 将搜索匹配项保存到一个或多个文件中。- v3 G2 I. w9 }9 ~& I) {
在操作面板的顶部, "搜索" 操作类型最初显示相同的两个 "list only files matching all terms 仅列出匹配所有术语的文件" 和 "group identical matches 组相同匹配" 复选框作为 "简单搜索" 操作类型。当打开 "简单搜索" 不可用的 "group identical matches" 时, 将显示其他选项。在将搜索匹配项saving search matches into files保存到文件中时, 这些选项非常有用。* ]- ?) S3 l1 ^# g) d
Group Results for All Files 将所有文件的结果分组! O3 H2 n8 `$ p/ P9 _  d
打开, 为所有通过搜索的文件生成一组结果。关闭为每个文件生成单独的结果集。
9 `% T- C# I7 B3 a) zOrder of Collected Matches 收集的匹配顺序/ A5 O7 e, u* P0 j0 w- C
选择将收集的匹配项保存到目标文件中的顺序。$ r# K# Y# \' O# z! a6 i& Z
* Alphabetic: A..Z
6 k6 a2 g; @; h+ x6 q7 k: \# _* Alphabetic: Z..A  A+ e+ _1 p5 ^  j3 g7 _" K
* Alphanumeric: A..Z, 0..9; x" `! _* a: I; J; b& r
* Alphanumeric: Z..A, 9..0
% D$ `/ T/ s; h3 a9 a: F- W+ A3 t9 H& Y* By increasing totals6 m! G$ A1 X1 g: R2 n. P  F
* By decreasing totals
& y+ ^+ M4 j& X/ |7 W( ]Minimum Number of Occurrences 最小发生次数
4 P. [4 i" }% b$ q1 n/ @# m) D  j0 N  ?8 }. V( d9 A9 k
设置为1可将所有匹配项保存到其目标文件中, 而不考虑每个匹配发生的次数。设置为大于1的数字, 只保存那些多次发生的匹配项。从结果中删除的匹配次数会减少。它们不保存到目标文件中, 它们不在结果面板中列出, 并且在编辑器中没有突出显示。7 z( W3 a( l/ }" Y
Example: Extract or delete lines matching one or more search terms 提取或删除与一个或多个搜索字词匹配的行+ k2 A$ e: J: D) z" f) z
Collect Data 收集数据
2 I, k0 U! Q3 b! k$ v
/ {% C0 |- A5 L$ C% l# e% T
) p, p3 F3 }1 A# Y0 L, S"收集数据" 操作类型就像 "搜索" 操作类型一样运行搜索。它提供了所有相同的选项, 在标记为 "收集" 的操作的主要部分中有一个额外的编辑控件。在那里, 您可以输入在每次找到搜索匹配时要收集的文本。使用正则表达式时, 可以在搜索和替换中使用与替换文本相同的语法。搜索字词列表时, 您可以输入要为每个搜索匹配收集的不同文本。使用分隔的搜索字词列表时, 可以输入要作为分隔对收集的搜索字词及其相应文本。如果您不键入要为特定搜索字词收集的任何文本, 则会收集实际的搜索匹配, 就像 "搜索" 操作类型一样。' `; Y  n/ s% z' _* G2 z8 G* K
如果要处理的文本超出了capturing groups and backreferences捕获组和引用可以轻松完成的操作, 请打开 "extra processing额外处理", 在要为每个搜索匹配收集的文本上运行额外的搜索和替换。在要收集的文本和额外的处理中, 可以使用引用从 "filter files筛选器文件"、"file sectioning文件切片" 和操作的主要部分的正则表达式中命名捕获组。6 W9 ]1 o3 M% L& O, t- E! m8 s
Examples: Find email addresses, Collect page numbers, Collect XML Data with entities replaced, Inspect web logs and Extract Google search terms from web logs
- X$ ?( I# C3 x) [$ B查找电子邮件地址、收集页码、用替换的实体收集 XML 数据、检查 web 日志、从 web 日志中提取 Google 搜索字词- s$ x  V; i: ~  {% b4 }
Count Maches 计数匹配
$ l7 H  O. B6 N% o
$ j( @4 E7 V) ?% G$ h
8 k' a- D0 Q/ J& q8 }* C  H"count matches" 操作类型就像 "搜索" 操作类型一样运行搜索。但是, "计数匹配" 不显示在文件中找到的搜索匹配结果, 而是显示您在操作的主要部分中输入的搜索字词, 以及该搜索字词匹配的次数。结果中也列出了没有匹配项的搜索条件。在搜索正则表达式时, 每个 regex 的所有匹配项都将计入该 regex, 即使匹配不相同。
6 B8 c/ b) g7 m3 MList Files 列出文件$ i% F+ B* P/ i8 y. v
' C1 E9 J" h: |  b
"列表文件" 操作类型在操作的主要部分不需要搜索字词。如果不提供搜索条件, PowerGREP 只列出文件选择器中包含的所有文件。如果您提供搜索字词, PowerGREP 将搜索文件的内容以查找它。将列出包含搜索字词的文件, 而不包含搜索字词的文件将不列出。你可以通过打开 "invert search results 反转搜索结果" 来做相反的事情。如果要同时执行这两种功能, 请列出匹配 "A and not B" 的文件, 关闭 "反转搜索结果"。设置搜索 A 的主操作, 并使用 "筛选文件" 选项排除包含 B 的文件。
4 z) h( [% L& B( b( e, q7 I搜索结果中从不列出匹配项。仅文件名。在 "操作面板" 的顶部, 您可以选择仅列出文件名、相对于文件选择器中标记的文件夹的路径或完整路径。这使得 "列表文件" 操作类型比 "简单搜索" 或 "搜索" 快得多, 因为在文件中找到第一个搜索匹配项后, "列表文件" 将继续使用下一个文件, 而其他两个操作类型总是尝试查找所有搜索匹配项。每个文件都可以在结果中列出。8 Q& x; C+ h2 z2 t2 u9 J4 d* \5 S
"列表文件" 操作的目标选项允许您将路径列表保存到文件中, 以及复制、**或删除找到的文件。
. y$ S. s( y  @8 b- D) l  oExample: Find files not containing a search term 查找不包含搜索字词的文件' E5 s; Q( p# e
File or Folder Name Search 文件或文件夹名称搜索0 R: X$ E3 x/ Y' d3 a

' p5 I- ~" v' s" p1 f. g$ W3 X0 @! @3 D
如果希望操作的主要部分搜索文件的名称而不是其内容, 请将操作类型设置为 "文件或文件夹名称搜索"。"要搜索的内容" 设置决定是否只搜索文件的名称、文件夹的名称或文件和文件夹的名称。该设置还确定是否仅搜索文件的名称、文件相对于文件选择器中标记的文件夹的路径或文件的完整路径。如果设置了目标选项以保存找到的文件列表, 则 "搜索内容" 设置还将确定文件路径中保存到目标文件中的部分。
* X1 _1 m6 A. m- v# r# O* e如果打开 "invert results 反转结果", 则结果将显示文件或文件夹路径, 其中没有搜索字词可供查找。如果打开 "仅列出与所有术语匹配的文件", 则会得到找到所有搜索字词的文件或文件夹路径。如果您打开这两个选项, 就会得到一个所有路径的列表, 其中没有搜索字词或某些搜索条件, 但不能找到所有搜索字词。
5 n" r/ N* A! V. L! m& k. A- e- |有两种方法可以搜索文件名和文件内容。最简单的方法是使用 "文件名搜索" 操作类型。使用操作的主要部分搜索文件名, 并使用 "filter files 筛选文件" 选项搜索文件的内容。筛选文件总是根据文件的内容完成的, 即使是 "文件名搜索" 操作也是如此。/ U, p8 H4 X- Y# o/ X
, Q& N0 H/ T) q0 s, ], M0 W
另一种搜索文件名和文件内容的方法是使用File Selector文件选择器中的 "include files 包含文件" 和 "exclude files 排除文件" 框来包含或排除基于文件名称的文件。然后, 您可以使用 "操作面板" , 使用 "列表文件" 操作类型或搜索文件内容的其他操作类型之一来搜索所包含文件的内容。
4 v, Y2 R# k- @& b0 ]0 z- b' {7 e: i: `4 s/ K" o4 O/ X
"文件或文件夹名称搜索" 操作的target options目标选项允许您将路径列表保存到文件中, 以及复制、**或删除找到的文件和/或文件夹。
8 m4 \& H- ?. O3 w$ R& b  L& x, G. m" Y) h5 c4 g+ d7 v
File or Folder Name Collect 文件或文件夹名称收集
* o* Y2 `" [' X
( F; k& Q# e: l# |0 V( y7 Y' r6 ^7 a8 ]- W! z  E& P2 a: W/ u
"文件或文件夹名称收集" 操作类型与 "文件或文件夹名称搜索" 操作类型相对应, 就像 "收集数据" 操作类型与 "搜索" 操作类型相对应。它搜索文件和文件夹的名称, 但不是收集搜索匹配项, 您可以使用替换字符串语法指定要收集的不同文本, 这可以通过 "额外处理" 进行进一步的操作。对于此操作类型, Path placeholders路径占位符也非常有用。4 w6 H# v( [  D0 L7 m
Example: Process files in a batch file or script 在批处理文件或脚本中处理文件
; e& Q' f. I9 _Rename Files or Folders 重命名文件或文件夹) {1 y% h% M0 N

) U- ]9 g6 B" V/ ?. `
7 N% e0 l4 K8 X( ]! ^"重命名文件" 操作类型使该操作的主要部分中的搜索字词在文件名称而不是文件内容上起作用。每个文件的新名称是通过在文件名称上运行搜索和替换来确定的。
$ ^0 G& k; s$ Q# e"重命名文件" 操作类型不仅可以重命名文件。在 "操作" 面板的顶部, 您可以选择是仅在文件的名称上执行此搜索和替换, 还是在文件路径上相对于文件选择器中标记的文件夹或文件的完整路径。如果只搜索并替换文件的名称, 则会重命名该文件并将其保留在同一文件夹中。如果通过相对于文件夹的路径进行搜索和替换, 则文件可能会根据搜索和替换的结果**到该文件夹的不同子文件夹中。如果通过完整路径进行搜索和替换, 则可以在任何位置**该文件。确保结果是有效路径是您的责任。如果不这样做, PowerGREP 会跳过没有得到有效路径的文件。6 Z4 h8 ?" j$ N- [0 J5 U
除了重命名和**文件之外, 您还可以通过将 "目标文件创建" 选项设置为 "复制文件" 来复制它们。您甚至可以将文件添加到. zip 存档中, 或从 PowerGREP 支持的任何存档格式中提取它们。如果将 c:\file.txt 重命名为 d:\archive.zip::file_from_c.txt 然后 file.txt 被添加到 d:\archive.zip 的新名称 file_from_c. txt。反向从存档中提取文件。PowerGREP 使用双冒号从存档中的每个文件的路径中分隔存档。存档的扩展名必须是在 "首选项" 的 "存档格式" 部分中配置的。同样, 将 file.txt 重命名为 file.txt.bz2 将压缩此文件, 同时重命名 file.gz 到 file.txt 解该文件。您甚至可以通过重命名文件来解压缩和压缩. gz 进入 file.txt.bz2。这适用于在 "存档格式" 首选项中配置为单个文件压缩格式的任何扩展。  ~/ Q" s/ i  \5 H) b, G* C3 ?' f6 ?
"重命名文件" 操作类型允许您使用 "筛选文件" 设置搜索每个文件的内容。您可以使用此方法仅根据其内容重命名某些文件。更强大的是将命名的捕获组添加到 "筛选文件" 的正则表达式中。然后, 可以在操作的主要部分的正则表达式和/或替换文本中使用引用到该命名捕获组。这使您可以在文件名中使用文件内容的特定部分。3 t6 W! q  _- v' T8 \, J
"what to rename要重命名的内容" 设置还包括重命名文件夹的选项。如果文件夹被重命名或**, 并且该文件夹中的文件或文件夹也包含在该操作中, 则这些文件和文件夹仍会被处理, 因此在重命名或**其父文件夹后, 它们可以自行重命名或**。因此, 如果您只在文件夹名称 (而不是文件夹路径) 中重命名 A 到 B, 则文件夹 C: \ A 被重命名为 C: \ b。原来 C:\A\A 的子文件夹被重命名为 C:\B\B。
* Y& N' v. `; X) T- G如果将目标类型设置为 "copy folders 复制文件夹", 则复制的文件夹内的文件和文件夹将随父文件夹一起复制。但是, 即使复制文件夹中的文件和文件夹的名称被标记为包含在文件选择器中, 也不会进行搜索。该操作从不制作同一文件或文件夹的两个副本, 也从不复制副本。因此, 如果通过只用文件夹名称 (而不是文件夹路径) 中的 B 来替换文件夹, 则将文件夹 C:\A 复制到 C:\B。它最初 C:\A\A 的子文件夹被复制为 C:\B\A。将不会有额外的副本 C:\A\B, 也不会将其复制副本作为 C:\B\B。
/ x  F& g) u" u; @8 T4 e! O操作面板的 "额外处理" 部分也可用。您可以使用它在替换文本上运行一个额外的搜索和替换, 用于重命名文件。
: z) Z0 Y5 [; u" C+ \  WExamples: Replace in file names and contents and Rename files based on HTML title tags
$ O7 x9 K% l3 I; W; O/ L7 V在文件名和内容中替换、根据 HTML 标题标记重命名文件
; E' y" j+ ~6 `" `0 Q3 ^Search and Replace 搜索和替换
9 L$ L% ?7 o. p' f) o
' U2 e% k3 ~! U9 J$ t9 X2 Q$ J7 ?6 A% e% g  m9 f+ t, n
当您在 "操作" 菜单中选择 “Clear 清除" 并将操作类型设置为 "搜索并替换" 时, 您可以像在任何支持正则表达式的文本编辑器中一样轻松地运行搜索和替换。只需在搜索框中键入搜索文本, 将替换文本输入到操作的主要部分中的替换框中, 然后单击工具栏中的 “Replace 替换" 按钮。4 Y+ ^+ c' i  E8 A. q( S( N& A  q
但是 PowerGREP 在操作面板上提供了更多的选项。"筛选文件" 设置允许您将搜索和替换的文件限制为可以或无法匹配的单独的搜索字词集。使用 "文件剖切" 选项, 您可以将文件拆分为行或其他部分, 并分别搜索和替换每一行或节。还可以将行或节作为整体替换。
8 ~+ \% G& R* a( |9 s使用正则表达式时, 可以在替换文本中使用引用,不仅从操作的主要部分捕获组, 而且还可从 "文件切片" 和 "筛选器文件" 部分获取命名的捕获组。如果捕获组和引用不足以建立替换文本, 则可以打开 "额外处理" 以在每个替换文本上运行额外的搜索和替换。+ |; r$ o9 w0 }& ~0 N$ |: ?9 a

/ B/ s2 D* W5 d1 N"上下文" 设置不用于执行搜索和替换。它们只用于在 PowerGREP 中显示结果。如果您**在预览或执行 "搜索并替换" 后手动进行或还原替换, 则收集额外的上下文可能非常有用。" a8 e5 Y4 T! w1 u$ C
Examples: Delete repeated words, Add a header and footer to files, Add line numbers, Insert proper HTML title tags, Replace HTML tags, Replace HTML attributes, Put anchors around URLs that are not already inside a tag or anchor, Replace in file names and contents and Apply an extra search-and-replace to target files
* z! t3 i: [9 F* J. R, U% S删除重复的单词、向文件添加页眉和页脚、添加行号、插入适当的 html 标题标签、替换 html 标记、替换 html 属性、在尚未包含标记或锚点内的 url 上放置锚点、在文件名和内容中替换、对目标文件应用额外的搜索和替换
- d1 a% x' ]% W. [Search and Delete 搜索和删除
7 q( f8 @$ z- F6 G
0 S, R! }1 b, H) s' ?. s0 y) W0 F6 e9 |% H2 o  ?
"搜索和删除" 操作类型实质上是 "搜索和替换" 操作类型, 没有任何替换文本。搜索匹配被替换为 "无" 或 "已删除"。有一个额外的选项, 允许您只删除某些匹配。
; }1 g1 ]  z0 x# T! u3 I! ?5 O此操作类型删除搜索匹配项, 而不是文件。如果要删除找到搜索匹配项的整个文件, 请使用 "list files列表文件" 操作类型以及 "delete files 删除文件" 目标类型。
( ^9 E/ W( J9 V5 z1 {* XMatches to Delete 要删除的匹配项
8 w. R5 {6 y% c9 n/ m/ @. D# g& t& [选择要删除的搜索匹配项:
7 l1 W& t) l7 f) o* All matches 所有匹配: 删除所有搜索匹配项。9 g5 k8 x8 x, k: M5 \& g$ n
* Duplicate matches 重复匹配: 仅当文件中的同一文本已匹配时, 才删除搜索匹配项。
  X+ X0 E7 s) T5 v0 }* Duplicates, separately per search term 重复, 每个搜索字词分别为: 仅当同一搜索字词在文件中已匹配相同的文本时, 才删除搜索匹配项。
: \- N- c% |# Y7 z) ?* Second and following matches 第二个和下面的匹配项: 删除文件中的第二个和后面的搜索匹配项, 而不管是否匹配相同或不同的文本。" F2 K% m; ]. i8 z
* Second and following, separately per search term 根据搜索字词分别进行第二次和后续搜索: 删除文件中每个搜索项的第二个和后面的查找匹配项, 而不管是否匹配相同或不同的文本。8 ^# @' ~( g" M) E1 Z8 G
Example: Extract or delete lines matching one or more search terms
9 R: A0 M1 r- |4 _提取或删除与一个或多个搜索字词匹配的行" y+ a. y9 ]9 T2 }* }8 [/ M) F; R
Merge Files 合并文件
( ~1 L5 Q8 ^/ Y8 t9 q! k, K% c- x9 Z: A
# S1 H$ k- A6 x3 k% A% b5 @
( s; a  a# G: c& ]* P3 _9 L"合并文件" 操作类型可以在操作的主要部分中使用或不带搜索字词, 以收集 "列表文件" 操作类型所描述的文件列表。只要发现文件匹配, 文件的全部内容就会保存到一个新文件中。如果文件已存在, 则 PowerGREP 会覆盖该操作。如果在单个 "合并文件" 操作中为两个或多个匹配的文件 (甚至所有文件) 指定相同的目标文件, 则这些文件将合并到目标文件中。您可以使用 "操作" 面板上的 "收集的文本" 设置来指定在合并文件时是否出现任何文本, 以及目标文件是否应具有某些页眉或页脚文本。
5 Z: L2 F0 O4 B, ^如果将 "目标创建类型" 设置为 "merge based on search matches 基于搜索匹配的合并", 则在操作的主要部分中将显示一个标记为 "目标文件" 的框。此框允许您输入替换文本, 就像搜索和替换一样, 包括引用和 "额外处理"。不同之处在于, PowerGREP 希望您的替换文本成为有效的路径。这是 PowerGREP 将文件合并到的路径。0 P$ g8 s# I* v4 y6 b
Example: Merge web logs by date  按日期合并 web 日志
6 f: ?4 T2 S& [" L. ySplit Files 拆分文件
2 |3 t7 G* |; ?4 |  n( S
4 |1 q; k, U' v( Q% ^% d; O
3 o( v) a& z- k' s: c) M' M"拆分文件" 操作类型与 "收集数据" 操作类型相同, 但有一件事除外: 为每个搜索匹配而不是要收集的文本, 您需要为每个搜索匹配提供一个目标文件的完整路径。您可以使用引用和 "额外处理" 的所有相同语法来构建此目标路径。搜索匹配被保存到此文件中。如果文件已存在, 则 PowerGREP 会覆盖该操作。如果在单个 "拆分文件" 操作中为多个匹配项指定相同的目标文件, 则它们都将保存到该目标文件中。即使在不同的源文件中找到了匹配项, 也可以同时进行拆分和合并。您可以使用 "操作" 面板上的 "收集的文本" 设置来指定在收集的匹配项之间是否应显示任何文本, 以及目标文件是否应具有某些页眉或页脚文本。
0 e# ]% L% z% G0 Y/ e& i  AExamples: Split web logs by date, Split logs into files with a certain number of entries and Split database dumps  |; Q; R, |, r+ @& h2 T
按日期拆分 web 日志, 将日志拆分为具有一定数量条目的文件、拆分数据库转储
) T7 R  }: W3 x

该用户从未签到

 楼主| 发表于 2017-11-25 21:00:28 | 显示全部楼层
actiontarget.html
0 C: S' V' q$ J' A- G3 {$ @; V, H6 T' Y% O+ h$ r% @, F- p2 Y- o
Action Part: Target and Backup Files 操作部分: 目标和备份文件
1 H5 d. W* W8 c) O
% l1 R& C2 x* |' E6 s在Action panel操作面板的底部附近, 您可以选择在执行操作时 PowerGREP 应如何保存、修改或复制文件。若要在不修改任何文件的情况下运行操作, 只需使用 "Preview button预览" 按钮即可。预览操作不会修改任何文件或做任何其他可能会后悔的事情。. z) b! R% E/ ?; b  Q- \
7 W2 I4 H: l' N4 A' @% h
Target Files 目标文件  _6 P1 n6 q( h- P# }
; ^) u& @+ W5 m! @
Target File Creation 目标文件创建
" `/ V7 U" {. w- H* W% @; h* r
& A: V8 f1 D4 M7 e+ F可用的目标类型取决于您准备的kind of action操作种类。七目标类型可用于 “search 搜索"、"collect data 收集数据" 和 "file or folder name collect 文件或文件夹名称收集" 操作:
; d9 \" P8 f8 |# t4 ]) B* Do not save results to file 不要将结果保存到文件: 只在 PowerGREP 中显示结果面板上的结果。1 D6 {0 L  ]( t4 X
* Save results into a single file 将结果保存到单个文件中: 将从所有文件中收集的文本保存到单个新文件中。
1 t1 t; \" t6 `  ~9 t4 P* Copy results to the clipboard 将结果复制到剪贴板: 将从所有文件中收集的文本复制到剪贴板。
1 J" T% n4 `" Y9 q$ M* Store results in the editor: 在编辑器中存储结果: 将从所有文件中收集的文本存储在 “Editor 编辑器" 面板上未保存的文件中。
0 F# n# H& l) g: f3 L* Modify original files 修改原始文件: 将每个文件中收集的文本保存到文件中, 改写原始文件。最终结果是一个搜索和替换, 它删除了文件的不匹配部分。
0 Q& I( s6 f* G$ E* Save one file for each searched file 为每个搜索文件保存一个文件: 为每个具有一个或多个搜索匹配项的文件创建一个新文件。将从文件中收集的文本保存到新文件中。
; x( k& w6 ^" v( |8 L/ G1 u$ T# w/ S* Path placeholders 路径占位符: 使用路径占位符来为通过搜索的每个文件动态构建完整的目标路径。如果占位符导致搜索的多个文件的目标路径相同, 则从所有这些文件中收集的文本将合并到目标文件中。* w; n% k' C; G0 M
对于 "list files 列表文件” 或"file or folder name search文件或文件夹名称搜索"操作, 可使用九目标类型:! |" Z* ~: @& f1 H! T
* Do not save results to file 不要将结果保存到文件2 o1 R/ S; q% |% O: p2 y: G
* Save list of matched files to file 将匹配文件的列表保存到文件: 将文件名列表保存到一个新文件中。. I, m; a3 _3 I; _9 t5 N
* Copy list of matched files to clipboard 将匹配文件的列表复制到剪贴板: 将文件名列表复制到剪贴板。! J9 u6 h- v- ]. X* F) Y$ P& C: m
* Store list of matched files in the editor 在编辑器中存储匹配文件的列表: 将文件名列表存储在编辑器面板上未保存的文件中。. n/ d. w5 ]( g0 t+ m
* Copy matched files 复制匹配的文件: 如果一个文件有一个或多个搜索匹配, 请复制它。如果没有搜索字词, 则复制所有包含的文件。您可以使用target file destination type目标文件目标类型来压缩或解压缩文件, 同时保留原件。
3 r$ O, j0 Z) P$ s- k* Move matched files **匹配的文件: 如果某个文件有一个或多个搜索匹配项, 请将其**到其他文件夹中。如果没有搜索的字词, 则**所有包含的文件。您可以使用target file destination type目标文件目标类型来压缩或解压缩文件, 删除原件。
4 @2 b# n# Y1 _3 G5 |* Convert matched files to text: 将匹配的文件转换为文本: 将具有搜索匹配的专用文件格式的文件转换为 .txt 扩展名的纯文本文件, 并使用特定的文本编码和/或换行方式。使用搜索匹配 (覆盖原始文件) 更改纯文本文件的文本编码和/或换行样式。
7 J3 j& T) v, ~, f( n" W( O* Convert copies of matched files to text 将匹配文件的副本转换为文本: 使用搜索匹配创建所有文件的副本。以proprietary formats专有格式复制文件的纯文本转换。更改所有副本的文本编码和/或换行样式。
) ^/ ?' _" i0 y* Delete matched files 删除匹配的文件: 如果某个文件有一个或多个搜索匹配项, 则将其永久删除。9 S4 U$ z, |8 a2 X  |
如果您设置 "what to search through 要搜索的内容" 以查找 "file and folder name search 文件和文件夹名称搜索" 操作以搜索文件夹名称, 则会得到不同的九目标类型列表:6 V8 k+ T6 p" d
* Do not save results to file3 n& n- M  W2 b5 B/ r# o" r
* Save list of matched folders to file 将匹配文件夹的列表保存到文件: 将文件夹名称列表保存到一个新文件中。+ D0 P; e7 A5 J0 Y; _! Y
* Copy list of matched folders to clipboard 将匹配文件夹的列表复制到剪贴板: 将文件夹名称的列表复制到剪贴板。" a: c) `8 B. ]( ?
* Store list of matched folders in the editor 在编辑器中存储匹配文件夹的列表: 将文件夹名称的列表存储在 "编辑器" 面板上未保存的文件中。
+ I! `$ F7 o1 d( F* Copy matched folders 复制匹配的文件夹: 如果文件夹的名称或路径具有一个或多个搜索匹配项, 请制作该文件夹及其所有内容的副本。如果没有搜索的术语, 则复制所有包含的文件夹。复制包含所有内容的文件夹, 包括隐藏文件和文件夹。如果目标文件夹已经存在, 请将其作为一个整体**到其备份位置。如果禁用备份, 请在复制匹配的文件夹之前删除现有的目标文件夹。不要在复制文件夹内的文件夹名称中搜索, 以免复制副本。
) k9 e) }/ ?/ H3 Q( W1 c2 i" l1 Z* Move matched folders **匹配的文件夹: 如果文件夹的名称或路径具有一个或多个搜索匹配项, 请将该文件夹及其所有内容**到另一个文件夹中。如果没有搜索的术语, 则**所有包含的文件夹。**包含所有内容的文件夹, 包括隐藏文件和文件夹。如果目标文件夹已经存在, 请将其作为一个整体**到其备份位置。如果禁用备份, 请在**匹配的文件夹之前删除现有的目标文件夹。还可以搜索**文件夹中文件夹的名称。如果它们匹配, 则在与其父文件夹一起**后, 将它们单独**。
2 x# Q2 L1 X( K/ S* Copy contents of matched folders 复制匹配文件夹的内容: 如果文件夹的名称或路径具有一个或多个搜索匹配项, 请制作该文件夹及其所有内容的副本。如果没有搜索的术语, 则复制所有包含的文件夹。单独复制匹配文件夹内的文件, 并将其放在其所有子文件夹中。跳过隐藏的文件和文件夹。如果目标文件夹已存在, 则将匹配文件夹的内容与目标文件夹的内容合并。如果这会导致文件被改写, 请逐个备份这些文件。不要在复制文件夹内的文件夹名称中搜索, 以免复制副本。
( t4 e% m6 }7 g1 W. l2 W. P* Move contents of matched folders **匹配文件夹的内容: 如果文件夹的名称或路径具有一个或多个搜索匹配项, 请将该文件夹及其所有内容**到另一个文件夹中。如果没有搜索的术语, 则**所有包含的文件夹。单独**匹配文件夹内的文件, 并将其放在其所有子文件夹中。如果该文件夹包含隐藏的文件和文件夹, 请跳过这些文档并将原始文件夹保留在后面。如果目标文件夹已存在, 则将匹配文件夹的内容与目标文件夹的内容合并。如果这会导致文件被改写, 请逐个备份这些文件。还可以搜索**文件夹中文件夹的名称。如果它们匹配, 则在与其父文件夹一起**后, 将它们单独**。
/ W/ d- B+ E5 w$ w* F0 `+ I: }- N* Delete matched folders 删除匹配的文件夹: 如果文件夹的名称或路径有一个或多个搜索匹配项, 请删除该文件夹及其所有内容。如果没有搜索术语, 则删除所有包含的文件夹。( h- k3 g0 |9 @" _

. s1 `, {) M! r1 _"search and replace搜索和替换" 或 "search and delete搜索和删除" 操作提供三目标类型:  s9 o0 ~4 Z( @2 X- V
* Modify original files 修改原始文件: 在所搜索的文件中进行替换。4 `# E. R. H& S% ^4 j7 n, S' J
* Copy only modified files 仅复制已修改的文件: 如果某个文件有一个或多个搜索匹配项, 请制作一个副本并修改该副本。
+ B+ u' m1 a! _6 V3 W2 _9 J  L* Copy all searched files 复制所有搜索到的文件: 复制所有搜索到的文件, 如果该文件有一个或多个搜索匹配项, 则修改该副本。
' m2 o8 s4 S; G"merge files 合并文件" 操作类型提供三选择:
$ B; ]1 H' w. O6 z3 L/ H! h4 f* Merge into a single file 合并到单个文件中: 将所有文件合并到一个新文件中。* m( I$ a) r9 e, M
* Merge based on search matches 根据搜索匹配项进行合并: 搜索要合并的文件, 并根据每个文件中的搜索匹配结果确定目标文件以将每个文件合并到一起。您可以在 main 操作中指定目标, 就像在搜索和替换操作中指定替换文本一样。
9 h# B5 t9 L7 K/ s, }, {* Path placeholders 路径占位符: 使用路径占位符来动态生成完整的目标文件, 以便将每个文件合并。/ P1 C5 ]0 y* L- D' C) s) o9 }
将操作类型设置为 "rename files or folders 重命名文件或文件夹" 时, 可以选择将文件或文件夹重命名或复制到新名称。由于更改文件的名称、文件的路径、文件夹的名称或文件夹的路径有不同的含义, 因此可用的目标类型取决于操作面板顶部的 "what to rename要重命名的内容" 设置。当它设置为 "file names only 仅文件名" 时, 您将得到以下目标类型:5 I3 K3 S0 X! c- p* S4 G
* Rename files 重命名文件: 将每个文件重命名为通过文件名称进行搜索和替换而创建的名称。
2 `( p( f* x# [* z) L  N3 F+ X* Copy files 复制文件: 将每个文件复制到通过文件名称进行搜索和替换所创建的名称。
; t0 r6 S# T- ?9 l当重命名文件的相对或完整路径时, 目标类型会略微更改为反射, 更改文件路径可以将文件**到新文件夹中:
4 R0 F0 o! B) E! a% m* Rename or move files 重命名或**文件: 将每个文件重命名或**到通过文件路径进行搜索和替换所创建的路径。新路径中的文件夹是根据需要创建的。4 y& e) ~. v1 v" s" s1 P* H0 }$ n, G
* Copy files 复制文件: 将每个文件复制到通过文件路径进行搜索和替换所创建的路径。新路径中的文件夹是根据需要创建的。, K+ c/ j, ~6 g/ H' H
可以通过添加或删除单个压缩格式的扩展 (如.gz or .xz) 来压缩或解压缩单个文件。3 d1 O9 s$ S0 r+ g+ l, k
在**或复制文件夹时, 有两种处理这些文件夹中的文件的方法。可以完全复制或**这些文件夹, 也可以将这些文件夹的内容作为单独的文件进行复制或**。
  k3 ~* v: s4 I  l% }4 j* Rename or move folders: 重命名或**文件夹: 将每个文件夹及其内容重命名或**到通过文件夹路径进行搜索和替换所创建的路径。重命名和**的文件夹将保留其所有内容, 包括隐藏的文件和文件夹。如果目标文件夹已经存在, 请将其作为一个整体**到其备份位置。如果禁用备份, 请在重命名或**匹配的文件夹之前删除现有目标文件夹。也可以在重命名的文件夹中重命名或**文件夹。
" H6 x* B" }# x6 ~0 k$ G* Copy folders: 复制文件夹: 将每个文件夹复制到通过文件夹路径进行搜索和替换所创建的路径。复制包含所有内容的文件夹, 包括隐藏文件和文件夹。如果目标文件夹已经存在, 请将其作为一个整体**到其备份位置。如果禁用备份, 请在复制匹配的文件夹之前删除现有的目标文件夹。不要在复制文件夹内的文件夹路径中搜索和替换, 以免复制副本。4 {* g( z6 \: r' U/ P
* Move contents of folders: **文件夹的内容: 通过文件夹的路径进行搜索和替换, 以确定要将其内容**到的目标文件夹。单独**匹配文件夹内的文件, 并将其放在其所有子文件夹中。如果该文件夹包含隐藏的文件和文件夹, 请跳过这些文档并将原始文件夹保留在后面。如果目标文件夹已存在, 则将匹配文件夹的内容与目标文件夹的内容合并。如果这会导致文件被改写, 请逐个备份这些文件。还可以通过**文件夹内的文件夹路径进行搜索和替换。将这些文件夹的内容与其父文件夹一起**后, 将其自己移出。3 Y5 M8 @% G/ b8 M0 {" z! C- O
* Copy contents of folders: 复制文件夹的内容: 通过文件夹的路径进行搜索和替换, 以确定要将其内容**到的目标文件夹。单独复制匹配文件夹内的文件, 并将其放在其所有子文件夹中。跳过隐藏的文件和文件夹。如果目标文件夹已存在, 则将匹配文件夹的内容与目标文件夹的内容合并。如果这会导致文件被改写, 请逐个备份这些文件。不要在复制文件夹内的文件夹路径中搜索和替换, 以免复制副本。$ Y( E3 B# E8 h9 f. _* W$ u) Z7 m
可以通过添加诸如. zip 或. 7z 等存档格式的扩展名来压缩文件夹。您可以通过从它们的名称中删除这些扩展来解压缩存档。
; e( T) L+ @6 b& BTarget File Destination Type 目标文件目标类型% O' A3 d, x% U7 e
5 l4 L, `" c+ b. Z5 o; Y

1 f9 f; w& H" h; t* D7 H选择要创建目标文件的位置类型。除非使用路径占位符, 否则目标文件将与原始文件同名。; G- [3 S5 H% n/ P, Y$ A: O* v
* Single folder: 单个文件夹: 将所有文件放入单个文件夹中。
5 f$ m1 H4 e2 S* Folder tree: 文件夹树: 将所有文件放到特定文件夹中。如果您将文件夹标记为也包括其文件夹, 则这些子文件夹将在目标文件夹下重新创建。
$ r+ g9 t0 }0 u  @% G3 E# ^8 `* Compressed archive: 压缩存档: 将所有文件放入单个. zip 或. 7z 存档中。如果您将文件夹标记为也包括其文件夹, 则这些子文件夹将在存档中重新创建。如果存档已存在, 文件将被添加到它。如果存档中已包含同名的文件, 则会创建该文件的备份副本。
0 n' e, ^: Z- [. f  C! T2 R* Numbered archive: 编号的存档: 类似于 "压缩的存档" 选项, 除非存档已存在, 否则将创建一个新的存档, 并将一个数字添加到其名称中。
+ E- Y- b- [; ~; {3 z, a* Path placeholders: 路径占位符: 使用路径占位符来为通过搜索的每个文件动态构建完整的目标路径。您应该注意为每个文件使用唯一的目标路径。否则, 目标将相互覆盖。- j7 ]! y1 |; G$ p+ w, f$ ]
Target File Location 目标文件位置8 _/ M/ N: C% M. K& y8 z* E

0 S" d! f7 J5 W5 N- L5 P6 @指定目标文件目标类型列表中所选类型的目标位置。单击 (...) 按钮以交互方式选择或生成目标位置。( `. ?- p6 Q5 M! T/ _) E
Target File Text Encoding 目标文件文本编码3 `) e% D" A6 Y# {
  v9 T# w. C: D) Q
选择要使用的 Unicode 编码或目标文件的 Windows 代码页。如果不确定, 请选择 "same as original file与原始文件相同"。
7 g4 e3 p5 b7 b5 |- f6 q: q+ qTarget File Line Break Style 目标文件换行样式$ b: n9 @/ T% k. @

/ b- `3 F+ A& I2 H选择要用于分隔目标文件中的行的字符序列。如果不确定, 请选择 "same as original file 与原始文件相同"。! }0 K" e* i  R
Order of Matches from Different Files 来自不同文件的匹配顺序. O1 t2 W& p) I+ T$ d4 F

% @. R$ j; c6 |  y在将数据收集到单个文件中而不同时对所有文件分组相同的匹配和对结果进行分组时, 此选项确定将收集的匹配项保存到该文件中的顺序。
" u0 H" {2 o$ A! U" L: ~  ~+ }& R# c* No particular order: 没有特定的顺序: 在找到搜索匹配项时收集项目。这是最快的选择。由于 PowerGREP 同时搜索多个文件, 因此从一个文件中收集的文本可能与从其他文件中收集的文本混合在一起。如果您设置 "between collected text 在收集的文本之间" 以在不同文件的匹配项之间放置文本, 或者指定源文件的页眉和页脚, PowerGREP 将保留每个文件的匹配项, 即使您指定 "没有特定的顺序"。这样可以确保文件之间的页眉、页脚和文本在逻辑上显示。/ k! X: c: }7 ^, n0 [3 D
* Keep each file's matches together: 将每个文件的匹配项保持在一起: 在处理每个文件时收集匹配项。从一个文件中收集的文本永远不会与从任何其他文件中收集的文本混合。由于 PowerGREP 同时搜索多个文件和驱动器, 因此从不同文件中收集的文本块与这些文件没有顺序关联。7 }( I4 k4 s8 g
* Sort files alphanumerically: A..Z, 0..9: 排序文件字母: 将每个文件的匹配项保持在一起。在处理完所有文件后创建目标文件, 以字母数字顺序收集文件中的文本。
+ a  [4 o& u: ~6 o' N* Sort files alphanumerically: Z..A, 9..0: 排序文件字母: 与前一个选项,相反。8 T* h+ ~( U* I6 E8 l
* Sort files by increasing totals: 通过增加总计来对文件进行排序: 将每个文件的匹配项保持在一起。在处理完所有文件后创建目标文件, 从具有最少搜索匹配的文件开始, 直到具有最多搜索匹配项的文件为止。# o' E3 |- @2 {8 s9 L* E6 e# d/ X
* Sort files by decreasing totals: 与前项相反。
' k5 E9 J( M7 E6 e( |. R* Newest file to oldest file: 最新的文件到最旧的文件: 保持每一个文件的匹配一起。在处理完所有文件后创建目标文件, 从最短时间之前修改过的文件开始, 直到最长时间以前修改过的文件为止。
* _. u) {1 z" F" O- b, r# ~& O* Oldest file to newest file: 与前项相反。! o# R1 s4 j% T2 [3 }. D& D
Backup Files 备份文件
3 E8 i1 G, i- y8 V! u, [- h) G8 y9 A+ E  u" w$ i3 G
无论何时指定可能导致文件被覆盖的目标类型, 都应指定 PowerGREP 应如何创建被覆盖文件的备份副本。虽然您可以告诉 PowerGREP 根本不创建备份副本, 但建议不要这样做。PowerGREP 需要备份副本才能Undo History撤消历史记录中的操作。如果没有创建备份文件, PowerGREP 将不会将该操作添加到撤消历史记录中。! X  L* L% p3 u1 z
Backup File Naming Style 备份文件命名样式
% V! K/ J1 z' G3 p7 `# K当目标文件已经存在时, PowerGREP 可以在覆盖文件之前制作一个备份副本。备份副本的名称基于目标文件的名称。
3 [& G7 m5 F) b) S: X6 J; N8 S8 D) v" b8 w/ @. ]2 H2 l4 @( y; [
* No backups: 无备份: 根本不创建备份。如果它覆盖文件, 则无法撤消该操作。7 d/ X/ _( z& q. ^
* Single *.bak: 单 * bak: 追加一个 ". bak" 扩展名。FileName. ext 的备份是 FileName.ext.bak。如果备份文件已经存在, 它将被覆盖。此选项在 Windows 资源管理器中为备份文件提供唯一的文件类型。8 u6 I. B8 I4 r  I8 N
* Single *.~*: 单 *.~*: 在文件扩展名中插入波形符。FileName.ext的备份是FileName.~ext。如果备份文件已经存在, 它将被覆盖。
6 \9 {. }# K3 x0 F( W: m% C* Multi .bak, .bak2, ...: 追加 ". bak" 扩展名。如果备份文件已存在, 请向扩展名追加一个数字, 以使文件名唯一。% t; c/ z5 Z1 R. w5 T/ U
* Multi "Backup N of ...": 在文件名称前面加上 "Backup 1 of "。FileName.ext 的备份是 "Backup 1 of FileName.ext"。如果该文件已存在, 则该数字将递增以使文件名唯一。此选项保留了扩展名, 从而便于在原始应用程序中打开备份文件。
: b1 F$ ~/ _+ g% |0 ^+ E* Same file name: 相同的文件名: 使用与原始备份相同的文件名。此选项要求您将备份文件放在单独的文件夹或. zip 存档中。如果备份文件已经存在, 它将被覆盖。+ I  s! ]" ~9 t3 E3 e) O7 h% |
* Path placeholders: 路径占位符: 使用路径占位符来为需要备份的每个文件动态构建完整的备份路径。
  g1 g3 ?" u" s* Hidden history: 隐藏历史记录: 将备份文件存储在覆盖文件的每个文件夹的隐藏 __history 子文件夹中。此选项确保备份文件不会使文件夹混乱。
$ d! ~# ~) a  P$ d6 u2 EBackup File Destination Type 备份文件目标类型
1 b) Y9 R  V; Z: z% e0 r
  r. W3 q1 z* v; o选择要创建备份文件的位置类型。( f. R* s9 J8 h! A: g* F
* Same folder as original: 与原件相同的文件夹: 将备份文件放在与备份文件相同的文件夹中。
3 Y4 ~. o2 I) n5 f* Subfolder of original folder: 原始文件夹的子目录: 将备份文件放在保存它所备份的文件的文件夹的子目录中。1 A" u$ o  e0 H- X
* Single folder: 单个文件夹: 将所有备份文件放入单个文件夹中。# }: m) {7 o- [* F( T
* Folder tree: 文件夹树: 将所有备份文件放到一个特定的文件夹中。如果您在文件选择中标记了一个文件夹, 并且将其文件夹包含在其中, 那么这些子文件夹将被重新创建。
9 {% I' Q2 G! z7 X8 Y* Compressed archive: 压缩存档: 将所有备份文件放入. zip 或. 7z 存档中。如果您将文件夹标记为也包括其文件夹, 则这些子文件夹将在. zip 存档中重新创建。如果存档已存在, 文件将被添加到它。
3 @) L0 r! X6 U! a, j# M* Numbered archive: 编号的存档: 类似于 "compressed archive压缩的存档" 选项, 但如果存档已经存在, 则新的存档将与一个数字添加到它的名字。( P- a9 w6 v* ^9 u2 {) Z
Backup File Location 备份文件位置# D0 J0 x: P% z& Y$ {/ S

( T2 U: d# S  x0 `+ I在 "备份文件目标类型" 列表中指定所选类型的目标位置。单击 (...) 按钮以交互方式选择或生成备份位置。

该用户从未签到

 楼主| 发表于 2017-11-24 17:46:48 | 显示全部楼层
actionsection.html
$ Q) o& X  w5 ]6 d! m% g* ?0 X5 |# F8 g2 w2 K- B7 V
Action Part: File Sectioning 操作部分: 文件切分( I( W0 M$ O- K* Y

3 C3 `! m7 u3 m/ M- O& T通过action definition操作定义的 "file sectioning 文件切片" 部分, 您可以指定 PowerGREP 应处理的每个文件的哪些部分。您可以仅通过每个文件的一部分进行 PowerGREP 搜索, 或按所需方式拆分每个文件, 而不是一次搜索整个文件。一个常见的选择是按行处理文件。除 "rename files or folders重命名文件或文件夹" 外, "file sectioning文件切分" 操作部分可用于所有操作类型。7 N) k4 r( i4 ^% P7 }+ G
Disabling File Sectioning 禁用文件切分2 w! ~9 H2 S/ z
8 Q! h! z: j4 w. M% t$ J
+ `8 M* M' {( L  Z  b5 J- t
默认为 "do not section files 不执行节文件"。PowerGREP 搜索整个文件, 没有任何边界。搜索匹配可以跨越多行, 甚至是整个文件。非剖切文件是最快的选项。
5 z6 T6 y$ _  j0 YSimple File Sectioning (Line by Line)简单文件切分(按行)
; k$ W9 f8 B; E: o
8 F3 M1 s. N/ M6 T. p
( O* l. [1 F' B$ v( ~, x"simple search简单搜索" 操作类型仅提供两个文件切分选项。而不是 “file sectioning文件切分" 下拉列表, 你得到一个 "line by line 按行" 复选框。勾选复选框选择 "按行" 文件切分, 而清除复选框则与选择 "do not section files不分区文件" 相同。
, a. e& O& P7 p# Z. s/ S! S当您选择 "line by line 按行" 时, PowerGREP 扫描文件以换行符。然后分别搜索每一行。分节中不包括换行符。这意味着, 操作的主要部分中的搜索字词永远不能与换行或跨行匹配。传统的 UNIX grep 每次都将正则表达式应用于一行。"line by line 按行" 选项使 PowerGREP 做同样的事情。
  l9 d3 B# u3 `( Q' P( W如果您告诉 PowerGREP search through binary files搜索二进制文件, 并打开 "line by line 按行" 文件切分, 然后 PowerGREP 也扫描二进制文件的换行和处理他们行。这是否是一个好主意取决于二进制文件的内容以及它们有多少行符。
6 {5 @! x! E7 U4 f当您选择 "按行" 时, 行之间的换行符不包含。当您选择 "按行 (including line breaks 包括换行符)" 时, 将包括换行符。在替换或收集整个部分时, 差异很重要 (见下文)。如果该节中包含换行符, 则在替换该节或将其包含在要收集的文本中时, 将删除该换行符。
% {6 Z* e. R2 H( Z当您勾选 “line by line 按行" 复选框时, 将出现一个或两个附加复选框。"invert search results 反转搜索结果" 选项使 "动作匹配" 部分 (行) 的主要部分无法找到搜索字词。然后将整个节 (行) 视为搜索匹配。这意味着在collecting matches收集匹配项或replacing matches替换匹配项时, 将收集或替换整个节 (行) 以替换文本。
  S3 g- W, S* ?& o6 A! h2 _当操作类型设置为 "list files列表文件" 时, 即使禁用了文件切分, 也会出现 "invert search results反转搜索结果" 选项。原因是, 对于 "list files列表文件" 操作, 此选项适用于整个文件, 而不仅仅是部分。当您为 "list files列表文件" 操作打开 "invert search results反转搜索结果" 时, 您会得到一个无法找到搜索字词的所有文件的列表。% ^  A6 G- D. s8 z/ o# L
如果"main part of the action操作的主要部分"有多个搜索项, 则会出现 "list only sections matching all terms 仅列出匹配所有条款的部分" 选项。打开此选项, 可以告诉 PowerGREP 只保留从各节 (行) 中找到的所有搜索字词的匹配项。在只包含某些搜索字词的节 (行) 中找到的搜索匹配项将被丢弃。如果为"search-and-replace 搜索和替换"操作打开此选项, 则必须替换匹配的整个节 (行)。
0 L+ `  o4 k  i; z9 Y; K# L9 H示例: Find two or more words on the same line在同一行上查找两个或多个单词
' G! [# t  m( E7 S8 b" g$ Y1 o9 p! h% B; }# {% M8 `
Regular File Sectioning (Line by Line)常规文件剖切 (按行)
, d) J0 w# m5 f- u( {- q: m: m2 R, Z! n: C# x) F; a

: }, `: z' s5 Y6 I7 I  u支持文件切分的所有其他操作类型都提供了其他选项。选项 "match whole sections only仅匹配整个节" 将操作的主要部分中的搜索匹配限制为与整个节匹配的匹配项。将跳过所有其他匹配项。例如, 当按行分割文件时, 只保留跨越完整行的搜索匹配项。3 r$ T0 w' A, h1 K
"Collect whole sections 收集整个部分"、"replace whole sections 替换整个部分"、"delete whole sections 删除整个部分" 或 "split whole sections 拆分整个部分" 导致操作的主要部分就像整个部分匹配搜索字词一样, 即使搜索项只与切分的一部分匹配。整个部分将作为搜索结果返回。此选项的标签随操作类型的不同而变化, 但核心行为保持不变。收集数据的操作将收集整个部分, 搜索和替换操作将替换整个部分, 搜索和删除操作将删除整个部分, 并将整个部分写入目标文件。/ [3 K2 @8 v. }( ]. l7 v8 J
示例: Extract or delete lines matching one or more search terms 提取或删除匹配一个或多个搜索字词的行、Boolean operators “and” and “or”  布尔运算符 "and” 和 Split web logs by date "or" 按日期拆分 web 日志。( r8 k+ j+ t' t2 V
Invert Search Results 反转搜索结果& b* n; j. D; q& d  D* r

' S% f& z7 g+ @打开以处理搜索字词找不到的部分 (搜索匹配项), 并处理搜索字词可以被发现为不匹配的部分。
2 ?! l; n6 ~/ W1 Z, D* L' v: p: Q如果您同时打开 "invert search results 反转搜索结果" 和 "match whole sections only 仅匹配整个部分", 则搜索字词只将部分或根本不匹配的部分视为搜索匹配。; C0 G+ v: y1 f9 f1 k
如果您同时打开 "invert search results 反转搜索结果" 和 "list only sections matching all terms 只列出与所有条款匹配的部分", 那么可以找到所有术语的部分被视为不匹配, 而在其中没有或部分 (但不是全部) 搜索字词的节被视为匹配.
$ Z3 t; b- p; t* P' I打开 "invert search results 反转搜索结果" 自动打开 "collect/replace/delete/split whole sections 收集/替换/删除/拆分整个部分", 因为当没有搜索条件的节必须被视为匹配时, 唯一的方法就是将整个节视为匹配。9 q6 b( d- c2 d1 g* S6 o6 W; n% n
8 G7 e$ u& L5 n; j
Other Ways to Split Files into Sections 将文件拆分为几部分的其他方法: l$ m/ ^3 }- q: o" q2 K& y
" M/ Z9 Z8 i5 Y

+ C' `1 I2 d( q7 m) H; Z若要将文件拆分为单行以外的块, 请使用 "split along delimiters 沿分隔符拆分” 切分类型。将文件拆分为几部分最常见的两种情况是带有自定义记录分隔符的文件 (i.e. not line breaks 即不换行符) 和不希望在文件中搜索的文件。% F( H2 w  P  ]
自定义分隔符很简单。只需输入文件在切片部分中用作search term搜索字词的记录分隔符即可。PowerGREP 将首先搜索分隔符, 然后搜索分隔符之间的文件 (即记录) 的每个部分, 以及第一个分隔符之前的节和最后一个分隔符之后的部分。分隔符本身永远不会被动作的主要部分 "看到”。' |7 I2 V0 l2 B# V( z( r

8 a/ I2 C- c; Q$ S2 Z; a3 L特别强大的是能够指定您不想搜索的文件的哪些部分。例如, 如果要处理某些源代码, 但不想在源代码中搜索注释或字符串, 请使用 "split along delimiters 沿分隔符拆分" 切片类型, 并在源代码中输入与注释和字符串相匹配的正则表达式列表。上面的屏幕截图显示了 Delphi 编程语言使用的注释 (步骤1到 3) 和字符串 (步骤 4)。结果是 PowerGREP 将注释和字符串视为 "分隔符", 并且只在注释和/或字符串之间搜索文件的各个部分。& e. G1 v6 S6 r" H: |8 D

5 Z8 P. _" f( U1 ~! J$ n. w# @" f示例: Search through or skip comments and strings 搜索或跳过注释和字符串、Add line numbers 添加行号、Collect page numbers 收集页码、Collect paragraphs (split along blank lines) 收集段落 (沿空行拆分) 、Put anchors around URLs that are not already inside a tag or anchor 在尚未位于标记或锚点内的 url 上放置锚) u4 ?; {: z3 o9 r) B" Z
2 L* A& X4 l2 f9 ?) F: n
要以相反的方式做事情, 即指定要搜索的部分, 请选择 "search for sections 搜索节" 切片类型。执行操作时, PowerGREP 将首先搜索切片搜索字词。然后, 该操作的主要部分将被限制为与切片搜索条件匹配的文件中的部分。主操作将忽略各节之间的任何内容。屏幕截图中的四正则表达式可以用来搜索 Delphi 源代码中的注释和字符串。% v2 c8 {) d2 Q6 j& A
注意:2 T& J; u+ p. g* J/ z
split along delimiters:搜索分隔符外的内容。
, \( x1 {( d+ ssearch for sections:搜索分隔符内的内容。& Q/ X% p+ f; |0 G0 `
最后一个切片类型 "search and collect sections搜索和收集节" 在您无法轻松创建只匹配要搜索的文件部分的正则表达式时非常有用。虽然你通常可以巧妙地使用 lookaround 来解决这个问题, 但收集部分往往更容易和更直接。% u& u  D/ w$ }3 h6 F* y
1 I8 {8 X- z$ }1 L' A; F' M0 L" \
在收集部分时, 每个分段步骤都需要 "section collect 切分收集"。"section collect 切分收集" 必须是切片正则表达式中的numbered编号或named命名捕获组的backreference引用。由捕获组匹配的文本是将被搜索的部分。每个切片步骤只能指定一个捕获组。例如, 如果您将 "section search 部分搜索" 设置为 regex <H[1-6]>(.*?)</H[1-6]> 和 "section collect 部分收集" 到引用 \1, 主操作将处理 HTML 文件中的标题标记之间的所有内容, 忽略标题标签本身和标题标记之外的所有内容。
. Y7 k7 g$ h$ x, G9 z
9 C3 {  ?* S5 b如果将 "section collect 部分收集" 留空以用于特定的切片步骤, 则不会搜索该步骤的匹配项。在non-overlapping search不重叠搜索中, 如果要排除某些部分, 这可能很有用。# C* [& z* _% }

5 Z0 |6 s# _3 b% o2 |* t# J示例: Search through or skip comments and strings 搜索或跳过注释和字符串, Make sections and their contents consistent 使切分及其内容一致,Replace HTML attributes替换 HTML 属性
/ h8 V( q" G+ a' T. l& v# f3 D- S8 f
Testing File Sectioning 测试文件切分
- Y* q! y- r; }, h. }: Y
, j) W! C. ^7 }# j通过运行虚拟搜索, 可以轻松地测试文件剖切设置。将动作类型设置为 "search搜索"。输入正则表达式 .++作为搜索条件, 打开 "dot matches newlines点匹配行"。此 regex 将完全匹配每个节, 并将其显示在结果中。, |4 P* V  t1 _, o

5 e( Q: B1 Z9 w: hHow Sectioning Affects The Main Search 切分如何影响主搜索
  t% |% C/ t, ?% V% N$ l: C8 G" Y/ g$ i7 ?$ X( e7 p
如果没有切分文件, 则main part of the action操作的主要部分将搜索整个文件。当您执行切分文件时, 操作的主要部分仅搜索切分的部分。操作的主要部分不能在节的外部 "看到"。在搜索文本或二进制数据时, 这并不重要, 但使用regular expressions正则表达式搜索时确实很重要。6 ^7 c$ F; ?, c# n4 ]! i! S9 L
就正则表达式引擎而言, 当它搜索某一节时, 该部分就是所有存在的。start-of-file anchor \A 和end-of-file anchor \z 将在每个节的开始和结束处匹配。Lookaround将无法 "看到" 超出该部分。4 H; ?' w0 i  \9 Z% q$ a" G

) I$ z) v% q$ H5 {8 QSectioning and Overlapping Search 分段和重叠搜索
' E/ S3 Q( P9 L% K7 D( h3 E当讨论search terms搜索字词的主题所述, 当搜索词包含多个项目时, 可以使用 "non-overlapping search 不重叠搜索" 选项。接下来假设您已经了解了重叠和不重叠搜索的含义。
. Z! S7 ~6 o7 x8 r! s. f8 c) `. n% n; n/ z! @8 b
默认情况下启用此选项。PowerGREP 将文件一次性切分, 而片段不重叠。在大多数情况下, 不重叠搜索是您需要的。当沿编程语言的注释和字符串进行切片时, 您希望忽略字符串内的注释字符, 并在注释中引用字符。不重叠搜索会自动处理该问题。" ]! O8 O4 |( v; \' D

$ H- C5 a) C9 L: v当您关闭 "non-overlapping search不重叠搜索" 时, PowerGREP 将根据您提供的分段搜索条件, 将该文件分割多次。主动作完全是在第一个切分步骤找到的所有剖面上运行的, 在 PowerGREP 继续第二次切分步骤之前。1 L: ~- e' V7 w2 `+ H$ u
. P$ D( H( V3 d7 n
这意味着在search and replace搜索和替换操作中, 在修改要搜索的文件时, 第二个切分步骤将在第一次切片步骤找到的所有节都经过完全搜索和替换之后处理该文件。这意味着第二个切片步骤可能会发现不同于处理原始文件时的分区。根据你在做**, 以及你是否考虑到这一点, 这种层叠效应可能产生可取的或不可取的结果。即使将target types目标类型设置为制作文件的副本, 甚至在预览操作时也是如此。PowerGREP 将修改文件的工作副本, 不管最终会发生**。7 y+ E( n" H: K5 ^# [2 p
$ K  Y+ R# r0 @9 R, g& |" M- f% s
Named Capturing Groups Carry Over 命名的捕获组6 F" A# I3 |$ |, a6 _( T+ }: y4 o
使用正则表达式时, named capturing groups carry over 命名的捕获组将从文件剖切到main part of the action操作的主要部分和extra processing part额外的处理部分。如果切片 regex 使用捕获组, 则可以在正则表达式中使用引用到该捕获组 and/or 是主动作 and/or 额外处理的替换文本。/ Q* A: z$ _$ [. `( ]0 E
示例: Collect a list of header and item pairs 收集标题,Make sections and their contents consistent项对的列表并使节及其内容一致。

该用户从未签到

 楼主| 发表于 2017-11-18 09:56:13 | 显示全部楼层
Action Part: Collect Between行动部分: 收集
8 e9 l/ c# k1 y' o! @% H# |# B! m
"search搜索"、"collect data收集数据" 和 "merge files合并文件" 操作类型将搜索匹配保存到一个或多个目标文件, 至少在"target file creation目标文件创建" 设置为 "do not save results to file不将结果保存到文件" 时之的任何时候。如果操作发现三匹配1, 2, and 3, 您可能希望将它们保存为1,2,3到目标文件而不是123。"collect between收集之间” 的"Action panel行动面板"的部分, 你可以告诉PowerGREP 应该放在收集的匹配之间放入**内容。在这个例子中, 我们在所有的匹配之间放一个逗号。
( o0 Z- M, [' N' U" j/ \0 v8 d: B此外, 您也可以将页眉和页脚添加到由 PowerGREP 创建的每个目标文件中, 而不是在匹配项之间放置文本。当从多个源文件 (通过搜索的文件) 中收集匹配项到单个目标文件中时, 还可以向在同一源文件中找到的匹配块中添加页眉和页脚。可以"path placeholders使用路径"占位符来添加对在中找到的匹配文件的引用。; L8 ]7 G9 @/ Y: @
根据您在 "collect between收集的文本" 下拉列表中选择的内容以及是否勾选 “collect headers and footers收集页眉和页脚", 操作的 "between collected text收集之间" 部分的外观会发生变化。如果您没有使用任何需要自定义文本的选项, 则不会显示任何文本框:0 @% U8 t% X1 q$ P4 Q8 }, O3 C

8 h6 e$ N! f2 R8 ?3 ]- Q8 g# U如果在没有任何页眉或页脚的匹配项之间只使用一个分隔符, 则会得到一个框来键入该分隔符:) r# x/ n) U8 Z& ?4 V1 H7 e4 c
7 k7 a% j, P6 \5 l! \$ I
如果您使用的是多个分隔符或页眉和页脚, 则会出现一个具有不同项目的列表。执行该操作时, 将使用列表中的所有项。您选择的项目是可以在文本框中进行编辑的项:+ R8 b9 o2 t: s
% l1 m* A# z. V
Between Collected Text 在收集的文本之间
; ?; ?) H. ^1 H6 z4 \
$ B. ^  }; u, r6 l  m选择在收集的不同的搜索匹配文本之间放置文本 (如果有):* X( {3 ?0 s' V2 Y$ f
* Nothing 没**: 匹配的文本之间不放入任何东西。# p0 j& m% Z  H% w# r
* Line break 换行符: 使用单独的行来收集每个搜索匹配的文本。
; V6 k8 R- l8 C. `* Text between matches and files 匹配和文件之间的文本: 在所有匹配项之间放置相同的文本, 而不管它们是从哪个文件收集的。/ i. _9 P( k# }, b/ N
* Text between matches only 仅在匹配项之间的文本: 将文本放在从同一文件收集的匹配项之间。不在不同文件 (文件头和页脚以外) 收集的匹配项之间放置任何文本。  `# |. ~% A, O2 m# w
* Text between files only 仅文件之间的文本: 不要在从同一文件收集的匹配项之间放置任何文本。将多个文件中的文本保存到单个文件中时, 在从不同文件收集的匹配项之间放置文本。
, c8 M! w! ?, a' k- a' t7 s* Different text between matches and files 匹配和文件之间的不同文本: 在从同一文件中收集的文本与从不同文件收集的匹配项之间放置一些文本。仅当将多个文件中的文本保存到单个文件中时, 才使用在不同文件中的匹配项之间放置的文本。
( M3 ?' i; M2 g" M* ~Collect Headers and Footers 收集页眉和页脚( \* T3 U7 m& D; k0 S+ m; Z3 f1 t2 f1 U
9 n! y8 |$ r4 H  `; v& p' l
将页眉和页脚添加到保存所收集文本的文件中。在收集到单个文件中时, 还可以向通过搜索的每个文件中收集的文本块添加页眉和页脚。$ X( I: c' V+ z
Expand Placeholders 展开占位符2 g, f* v' I9 \* w; N  G% l
3 A3 V3 t, d3 o3 L4 }
展开"path placeholders路径占位符"以及文件页眉和页脚中与操作相关的和文件相关的"match placeholders匹配占位符"。在源文件的页眉和页脚中, 路径占位符表示在中找到匹配项的文件的路径。在目标文件的页眉和页脚中, 它们表示所收集的文本写入的文件。
; k' r7 O3 B9 r"match placeholder匹配占位符"%MATCHCOUNT% 可在源文件页脚中使用, 以指示在每个源文件中找到的匹配项数。%MATCHCOUNT% 可用于目标文件页脚, 以指示写入每个目标文件的匹配项数。%FILECOUNT% 可以在目标文件页脚中使用, 以指示将其匹配写入该目标文件的源文件的数量。
& z' R$ n/ I. S7 Z  I+ QSelect Text to Edit 选择要编辑的文本
& W& [7 v9 P) p3 s. J8 L
7 X7 i* E1 x. `( r1 V6 i" y在该列表右侧的 “edit 编辑" 框中选择要编辑的文本。可用的匹配项取决于您对 "between collected text 收集的文本"、"collect headers and footers 收集页眉和页脚" 和 "target file creation 目标文件创建" 所做的选择。
/ P5 F- g% G3 {! R# u* Target file header and footer: Text to be put at the start and the end of each file created by the collect data action. Only used when collecting text from multiple source files into a single target file.
4 Q& ?: U5 Q' g. o5 }: N3 @8 j/ k$ {0 ]* Between matches 在匹配项之间: 要放在收集的匹配项之间的文本, 无论它们是来自同一文件还是来自不同的源文件。
0 }, Y- E' e, @- r* Between matches from the same file 从同一文件中的匹配项: 要放在从单个源文件收集的匹配项之间的文本。
: B+ Q9 }4 v7 a2 y, @* Between matches from different files 在不同文件之间的匹配项之间: 将文本放在从不同源文件收集的匹配块之间, 将它们保存到单个目标文件中。1 u2 l8 K1 S" u+ U' r/ D2 `
* Source file header and footer 源文件页眉和页脚: 在从单个文件中收集的文本块之前和之后放置的文本。可以使用路径占位符来插入源文件的路径。在为每个文件创建单独的目标文件时, 以及在将多个源中的文本收集到单个目标文件时使用。
$ y. A7 g" ^  y4 N# z7 Y5 `* Target file header and footer 目标文件页眉和页脚: 要放在由 "收集数据" 操作创建的每个文件的开始和结束处的文本。仅在将多个源文件中的文本收集到单个目标文件时使用。1 m. L' j$ A# t/ L1 r
示例: Compile indices of files 编译文件索引
9 y; ^2 _+ p  p; e Generate a PHP navigation bar 生成 PHP 导航栏

该用户从未签到

 楼主| 发表于 2017-11-20 19:00:53 | 显示全部楼层
actioncontext.html
% n. G! V8 c2 y, ?3 y1 P
4 l! j* ^1 _' T/ EAction Part: Context操作部分: 上下文+ T( ?8 X" p; F5 K' K
" X! E% f' C/ D
当您preview预览或execute执行某个操作时 (但不是在使用Quick Execute快速执行时), PowerGREP 会显示在 "Results panel结果" 面板上找到的搜索匹配项。为了更容易区分所有搜索匹配结果,面板有选项显示搜索匹配及其上下文, 而不仅仅是搜索匹配本身。只有当您在执行操作时要求 PowerGREP 收集每个搜索匹配的附加上下文时, 此选项才有效。
- ^$ A1 T9 F7 A1 J! V( v* H  v: \"list files列表文件" 和 "merge files合并文件" 操作类型不允许收集上下文, 因为这两种操作类型在 "结果" 面板上从不显示任何搜索匹配项。它们只列出文件名。"rename files or folders重命名文件或文件夹" 操作类型总是将文件的完整路径作为上下文来收集。因此, 对于这三操作类型, 操作面板的 "context上下文" 部分是不可见的。
$ y+ A5 m) M) }- P"simple search简单搜索"、"search搜索" 和 "collect data收集数据" 操作类型都允许收集上下文, 除非您已经打开了将"group identical matches相同匹配项分组"的选项。当对相同匹配项进行分组时, 每个唯一的搜索匹配只存储一次, 而不管它在您正在搜索的文件中发生的频率如何。由于相同的匹配可能有不同的上下文, 所以在对相同的匹配进行分组时, PowerGREP 没有办法收集该上下文。6 I- q# e6 H9 @; j
Disabling Context禁用上下文3 U- N# n# H$ t- W& p7 R1 p
2 p* T4 C9 [- z& w2 A& c
; `: f! l4 p2 x' P- b5 Z) t: n/ W
默认为 "no context无上下文"。这是最快的选项, 因为 PowerGREP 不必花费时间来查找上下文或存储它的任何内存。"Results结果" 面板不会显示任何上下文。( E1 X2 Y! }$ X  H$ L
请注意, 使用 "Quick Execute快速执行" 时不需要选择 "no context无上下文"。由于该命**告诉 PowerGREP 在结果面板上不显示任何搜索匹配项, 因此它也会自动禁用上下文, 而不管您在操作面板上选择了哪些上下文选项。
. L) E7 M. x+ Y3 q1 C% |Simple Context (Lines as Context)简单上下文 (作为上下文的行)+ `# u8 Z" q: h7 ~( E
$ E5 B. b7 b8 k4 L: s4 h) e
! P; x4 a6 u5 s+ k
"simple search简单搜索" 操作类型仅提供两个上下文选项。而不是 "context type上下文类型" 下拉列表, 您会得到 "use lines as context使用行作为上下文" 复选框。勾选复选框与在 "context type上下文类型" 下拉列表中选择 "use lines as context使用行作为上下文" 和打开 "show line numbers显示行号" 相同。清除复选框与选择 "no context无上下文" 相同。
% p0 p9 [+ V% p7 }* nExtra Context Before The Match 匹配前额外的上下文
  X. O4 k5 M: R
$ l! F( g6 o8 A匹配之前所需的附加块或上下文行数。" r6 c) l2 R! a& V% O2 @! W
如果选中 "展开到整行", 将添加额外的上下文行。否则, 将添加根据上下文类型的额外块。1 a5 W; a4 G8 I8 P: r
Extra Context After The Match 匹配后的额外上下文
4 q# o$ q4 Q+ q/ g  t
( v% K6 E- b, [% i' N# {3 f; R匹配后所需的附加块或上下文行数。
  h% a: d$ \$ V如果选中 "展开到整行", 将添加额外的上下文行。否则, 将添加根据上下文类型的额外块。
& X7 i1 Q) e! E% c' IRegular Context (Lines as Context) 常规上下文 (作为上下文的行)
- d& A. H. C8 o# q1 u6 Z& c2 Z
" F0 h! ~! |' W, I
+ J- a  j7 b7 F- g! v支持上下文的所有其他操作类型都提供了其他上下文类型。选择 "use lines as context使用行作为上下文" 以获得与简单搜索相同的上下文选项, 再加上一个:3 O/ f: P  a$ v( p7 p0 X6 C5 d
Show Line Numbers 显示行号5 G- _% H  t" N. D1 T

! }/ a1 N8 Q$ H, ^打开以扫描文件中的行, 并显示每行上下文或每个匹配的行号。关闭以显示顺序上下文编号。
; R+ X- P# b0 R7 c1 h  y& A2 _All Context Types 所有上下文类型8 x2 f0 |  ?- m* ^! n% G
0 a+ d! ]* M9 N( |" G
0 @' O& R3 ?+ X1 ~7 p' Q, {( L1 k( I
如果选择其他上下文类型, 则还可以使用更多的上下文选项。
7 s; y3 g$ k& Y5 rContext Type 上下文类型# i5 p6 H! ~6 r, ~( |
  H+ b) f7 l  c* J! @& e1 X6 h
在 "结果" 面板上显示搜索匹配项时, PowerGREP 可以在每个搜索匹配项**围显示额外的上下文。此上下文是在搜索匹配前后立即出现在文件中的文本。此设置确定 PowerGREP 将从文件中收集多少上下文 (如果有)。
3 ]& |/ H# j0 |5 M上下文仅在结果面板上使用。它永远不会保存到目标文件。( e- |* V1 F* w, i/ Z7 @$ Q
收集上下文会减慢搜索速度并占用额外的内存, 但会使检查结果面板上的搜索匹配更容易。如果不收集上下文, 则需要在结果中双击搜索匹配, 以打开在 "Editor 编辑器" 面板中找到的文件, 以便查看其上下文。
; W% N" N2 ]- U* m* 无上下文: 不收集任何上下文。结果中只显示搜索匹配本身。1 m3 O7 w- D* M0 T( M
* Use sections as context 将片段用作上下文: 当使用文件片段时, 可以使用在上下文中找到匹配的片段。这是 PowerGREP  用于工作的方式, 它没有单独的上下文设置。
7 \! ^/ d7 L1 v, f2 S& b5 n3 v% D; l* Use lines as context 将行用作上下文: 扫描文件中的换行符, 并使用搜索匹配的行来查找上下文。如果搜索匹配跨越多行, 则它开始和结束的行都用于上下文。
" D/ I8 \( H/ X) j  k  `* Fixed-length records 固定长度记录: 以相等长度的区块分割文件。用于非结构化二进制文件和由固定长度记录组成的文件。( @7 M% N+ e8 F2 \
* Split along delimiters 沿分隔符拆分: 在上下文搜索字词的每个匹配项上拆分文件。主搜索匹配项与上下文分隔符之间的文本, 并在主搜索匹配项之前和后面, 用于上下文。
" o) h/ m. U, l% q* Search for context 搜索上下文: 使用上下文搜索术语的每个匹配作为上下文块。如果主搜索匹配完全属于上下文搜索匹配, 则该上下文匹配用于上下文。如果不是, 则上下文搜索匹配的主要搜索匹配开始和结束用于上下文。如果主要和上下文搜索不总是产生重叠的匹配, 则某些匹配将在没有上下文的情况下显示。  m# g3 s- L* s- T, g: ?
* Search and collect context 搜索和收集上下文: 如上所示, 但能够在上下文收集框中指定引用, 以便只使用上下文 regex 的一部分作为上下文进行匹配。这要求上下文搜索是正则表达式。9 |2 X/ R+ H5 g3 b6 s: s
Count All Context 统计所有上下文3 W# `. d$ g3 g/ h# r+ @! c+ r

' E. H; L2 V; n7 T$ g* G打开以计算文件中的所有上下文块, 包括结果中未显示的上下文。关闭以显示结果中的顺序上下文编号, 忽略任何未使用的上下文。0 p7 b1 c& l0 @% ~; q( o
Expand to Whole Lines 扩展到整行7 p5 F+ I9 Q$ O

$ {5 `$ i- [4 L7 P. G# A打开以展开上下文, 以便所有匹配项始终显示为完整的上下文行。如果您**惯于使用行应用程序 (如纯文本编辑器) 处理文件, 则可以更容易地理解结果。关闭以允许上下文成为部分行。

该用户从未签到

 楼主| 发表于 2017-11-20 19:23:24 | 显示全部楼层
actionextra.html8 }! ]$ J. r; Y
( |9 X6 z) I0 z, w2 c3 f% W
Action Part: Extra Processing 动作部件: 额外处理' v5 u' C, e8 w8 m8 B! N- E
9 b$ \) n9 g6 [# ]7 A  z

2 ]2 B( d2 d" N只有当您将操作类型设置为 "search and replace 搜索并替换”、"rename files or folders 重命名文件或文件夹"或 "collect data 收集数据" 时, 操作面板的 "extra processing 额外处理" 部分才可见。标记 "extra processing 额外处理" 复选框时, 将出现一组用于输入"search terms 搜索字词"的额外控件。
: m- {; o- n* j"Extra processing 额外处理" 只是一个花哨的名称, 额外的搜索和替换。此搜索和替换不是在文件上运行, 而是在"search and replace 搜索和替换"操作中的每个替换文本上, 或者在 "collect data 收集数据" 操作中收集的每个文本上执行。当 main 操作使用"regular expressions 正则表达式"进行搜索, 并使用”back references 引用"替换或收集文本时, 才有用。额外的处理步骤在引用已被替换的文本或要收集的文本中被替换后运行, 给您一个重新格式化的机会。
" D# y( Q7 N1 |! s) R9 l9 l3 y" v例如: 从 web 服务器的日志文件中的 url 收集数据时, 您将得到 url 编码的数据。例如, 空格显示为plus symbols,显示为%2B。有了额外处理步骤, 你可以搜索和替换plus symbols回到空格, 等等, 使结果更容易阅读。, O# x3 ~! h9 c( o6 V
不要将额外处理与在搜索和替换操作的主要部分中输入"list of search terms 搜索字词列表"混为一谈。"main part of a search-and-replace action主要部分中操作"的每个搜索和替换都在整个文件或整个部分上运行。额外的处理只在替换文本上运行, 就在主操作进行替换之前。如果主操作使用列表, 则将对该列表中的所有项所做的每个替换应用额外的处理。
& T: ^' Q- l) S8 d* A2 M# x示例: Padding replacements填充替换, Rename Audio Files Using Meta Data使用元数据重命名音频文件, Rename files based on HTML title tags根据 HTML 标题标签重命名文件, Collect XML Data with entities replaced用替换的实体收集 XML 数据, Convert Windows to UNIX paths 将Windows 转换为 UNIX 路径, Extract Google search terms from web logs并从 web 日志中提取 Google 搜索字词
+ ]: v5 R* _" y5 N* wNamed Capturing Groups Carry Over 命名捕获组运用
( Q5 _/ `1 d7 H, @7 `0 ^0 M) |7 ]& `2 F( O3 a
使用正则表达式时, "named capturing groups命名的捕获组”将从"file sectioning文件切片”和"main part of the action 操作的主要部分"进行到额外处理。如果切片 regex 或主 regex 使用了捕获组, 则可以在正则表达式和/或用于额外处理的替换文本中使用引用到该捕获组。

该用户从未签到

 楼主| 发表于 2017-11-20 19:54:18 | 显示全部楼层
xmphtmltitlerename.html
0 N% ?( e3 ]6 p5 x1 N  s
" D8 |$ C; R% i3 _$ L2 J: ORename Files Based on HTML Title Tags 基于 HTML 标题标签重命名文件
1 R, I7 i7 K! d4 D. Y7 b6 f8 L& P# w+ d+ ?. o
通过 "rename files or folders重命名文件或文件夹" 操作类型, 可以通过搜索和替换文件名或路径来重命名文件。使用 "filter files文件过滤器" 功能, 您可以首先在每个文件的内容中运行搜索, 然后在搜索和替换文件的名称中使用 (部分) 搜索匹配项。这样, 您就可以从文件的内容中提取文本并将其插入到文件的名称中。
; ]  }) x, D. M9 N& F例如, 我们将重命名一组 HTML 文件。每个文件的新名称将是在文件内的 <TITLE> 标记中指定的任何一个。如果文件没有 <TITLE> 标记, 我们将使用 <H1> 标记的内容。如果文件没有标记, 则不会重命名它。
0 I2 {3 p0 C1 D0 y; \. f
  U9 d' }" Z# D( r: A1. Select the HTML files you want to rename 选择要在文件选择器中重命名的 HTML 文件。
6 X% [4 F* J3 f7 T2. 确保"file format configuration 文件格式配置"通过 HTML 文件的原始 (未转换) 内容进行搜索。预定义的 "None 无" 配置是这样做的。
+ k1 g3 R* R2 q, y3. Start with a fresh action. 从一个新的行动开始。
+ L* z) U4 m7 d4 q% W3 y4 |! {4. 将操作类型设置为 "rename files or folders 重命名文件或文件夹"。8 K: E7 P9 F' w+ d& F
5. 将 "what to rename 要重命名的内容" 设置为 “file name only 仅文件名"。我们的搜索和替换只应更改文件的名称。7 A: ^2 B" b8 i$ w# O
6. 将 "filter files 筛选文件" 设置为 "require all search terms to match 要求所有搜索条件匹配"。将搜索类型保留为 "regular expression正则表达式"。9 A5 t: V, Q" ^8 D8 q; X: b
7. 输入正则表达式<(TITLE|H1)[^<>]*>(?'title'[^<>]+)</\1> 搜索框中的 "filter files 筛选文件" 部分的操作。此 regex 与开始和结束 <TITLE> 或 <H1> 标签 (无论是第一对) 和它们之间的任何文本匹配。它们之间的文本被捕获到命名的捕获组 "title" 中。
0 C4 m& p0 v9 D/ m9 w+ e8. 输入正则表达式^.*\. 。在该操作的主要部分的搜索框中。此 regex 匹配文件名称中的所有内容, 包括最后一个点。' b0 ~  D3 o! c
9. 输入替换文本 $ {title}。将文件的名称替换为 "filter files 筛选器文件" regex 所匹配的标记的内容。替换还会将分隔文件扩展名的点放回。该扩展不由 regex 匹配, 因此保持不变。% l- g6 n( X& C: n
10. 勾选 "extra processing额外处理" 复选框。将出现一组用于输入搜索字词的附加控件。& G9 K, @' B7 ]
11. 使用[\\/:*?"<>|]作为额外处理的正则表达式。此 regex 匹配 Microsoft Windows 操作系统不允许在文件名中使用的任何字符。
, W6 F8 g% e; U* ?  I) Z) E& B; x12. 处理替换为空, 以便删除无效字符。* p" x+ @  Z3 k
13. 如需要, 设置"backup file options备份文件选项"。+ m5 ~! t% Y4 Z  U# O; S7 N9 a
14. 单击 "Preview button预览" 按钮运行测试。
, L; g$ J5 ~' a7 T: ]. J) n4 J15. 如果一切看起来都很好, 请单击 "Rename button 重命名" 按钮以实际重命名这些文件。: x' @% i# U+ k3 J9 O: Z/ m
如果文件没有 <TITLE> 或 <H1> 标记, 则它将"filtered out被过滤掉", 而不会被重命名。如果文件同时具有 <TITLE> 和 <H1> 标记, 或同一标记的多个匹配项, 则只使用第一个标记。一旦 "filter files筛选器文件" 中的所有正则表达式都找到了匹配项, PowerGREP 会考虑该文件以满足筛选要求. 它不会查找筛选 regex 的任何进一步匹配项。9 v* W& o) X( a7 C5 }0 S" k
此操作可在 PowerGREP5.pgl “library库"中作为 "Rename files based on HTML title tags 基于 HTML 标题标签重命名文件”。

该用户从未签到

 楼主| 发表于 2017-11-20 20:41:45 | 显示全部楼层
actionfilter.html) ]% {" @2 S1 t& ]
+ [9 V& I( c/ B' u) u- Y
Action Part: Filter Files 操作部件: 筛选文件
% b1 u9 x0 J9 [: Y; x: B: z  c3 H- K3 W* _
除 "simple search简单搜索" 外, "filter files 筛选文件" action part 操作部分可用于所有操作类型。它使您可以使用一组额外的搜索字词来筛选出文件。"filter files 筛选文件" 下拉列表提供了四选择:
% U' R  C* s2 Y$ G7 m* Do not filter files 不要筛选文件: 处理"File Selector文件选择器"中标记的所有文件。选中此选项后, "filter files 筛选器文件" 操作部件的所有其他控件都将隐藏。! C# O, z  w" `# h. D& [# }
* Disallow any terms to match 不允许任何匹配的字词: 只处理文件中没有任何匹配搜索字词的文件。
) x: M* N# K+ ^0 D, {% G3 n8 ^+ v2 ~# x* Require one term to match 需要一个匹配的字词: 处理含有其中一个搜索字词的文件。
9 R( V. ^  b* F* Require all terms to match 要求所有字词匹配: 处理匹配所有搜索字词的文件。最后两个选项之间的区别仅在使用多个搜索字词的 (分隔的) 列表进行筛选时才起作用。
- [# B4 m5 p* k/ ]筛选文件总是通过搜索文件的内容来完成的。而"file or folder name search文件或文件夹名称搜索"、"file or folder name collect文件或文件夹名称的收集" 以及 "rename files or folders重命名文件或文件夹" 不能进行筛选文件操作, 操作的主要部分都是通过文件的名称进行搜索。如果要根据文件名称筛选出文件, 请使用 "File Selector文件选择器" 面板上的 "exclude files排除文件" 框。: g* W$ c1 E) t3 C3 `* q. ?% u
除了要筛选的"search terms搜索字词"之外, 没有其他选项可供指定。"filter files 筛选器文件" 操作所找到的匹配项不会显示在 "Results panel 结果面板"上。如果某个文件被筛选出来, 结果中会显示它没有任何搜索匹配项, 无论它是用 "disallow any terms to match 不允许匹配的任何术语" 或 "require one/all terms to match 要求一个/所有术语匹配" 来筛选的。如果某个文件未被筛选掉, 并且能匹配在"main part of the action操作的主要部分”中输入的搜索字词,则结果显示主搜索的匹配 。  S' I$ X( A& W: X4 k. U
A And Not B a 而不是 B
  a5 f! e3 g3 d$ g* Q. t& z; P8 j8 k5 g/ \* L- O

0 e2 V+ Y- B, @/ t1 i# E9 [4 \若要获取包含 "a" 而非 "B" 的文件的列表, 请将 "action type操作类型" 设置为 "list files列表文件”。在"main part of the action操作的主要部分"指定一个作为搜索词。将 "filter files 筛选文件" 设置为 "disallow any terms to match 不允许任何匹配的术语", 并指定 B 作为要筛选的搜索字词。
( N3 R- o2 j3 Y  C& z6 p! i如果您使用 "search搜索" 操作类型进行了这项工作, 您将得到所有不包含 B 的文件中 a 的所有匹配项的列表。
  Q% k' {: V* P- H- g, C! z$ [示例: Boolean operators “and” and “or” 布尔运算符 "and" 和 "or"
# \) ?1 F8 _# ECapture Text for Reuse 捕获文本重用
0 y8 z& a2 v, _8 G1 @
* e4 ~, J$ U% c0 Q# e  w9 K
/ E; P$ d+ x  f2 N% F7 ^6 W! K+ Y使用正则表达式时, named capturing groups carry over命名的捕获组会将操作的 "filter files筛选器文件" 部分执行到所有其他部分。这意味着您可以使用 "filter files 筛选文件" 部分来运行额外的搜索来捕获文件的一部分。过滤器不一定要排除任何文件。然后, 可以在该操作的主要部分的正则表达式中使用引用到该命名捕获组, 从而在该文件的其他位置搜索该部分。也可以在操作的主要部分中的替换字符串中使用引用插入该部分。) K& \$ E4 N* }) P2 J* }; o
您甚至可以在每个正则表达式中使用具有不同命名捕获组的正则表达式列表来捕获文件的多个部分。将 "filter files 筛选文件" 设置为 "require all terms to match 要求所有字词匹配" 并关闭 "non-overlapping search不重叠搜索"。这两种设置确保 PowerGREP 在使用列表中的每个正则表达式时通过整个文件进行搜索, 并填充每个正则表达式的命名捕获组, 前提是它们都可以在文件中找到匹配项。/ q0 m" A; E  u8 a2 E* A2 m! Q
当 "filter files过滤器文件" 对文件的内容 (它总是这样) 和操作的主要部分工作于文件名 (它用于 "file or folder name search文件或文件夹名称搜索") 时, 命名的捕获组也会进行. "file or folder name collect文件或文件夹名称收集"和"rename files or folders 重命名文件或文件夹"行动)。这样, 您就可以在文件的内容中搜索文件名, 或者将部分文件名与文件内容的一部分一起收集, 或者将文件的名称更改为其内容中的某处。截图显示了使用此技术将rename HTML files to their titles or top-level headers HTML 文件重命名为其标题或 top-level 标题的示例。 .4 ?* b% N( \- L0 r+ \0 }$ t! N
示例:  Rename Audio Files Using Meta Data使用元数据重命名音频文件, Insert proper HTML title tags插入正确的 html 标题标签, Rename files based on HTML title tags基于 html 标题标签重命名文件。

该用户从未签到

 楼主| 发表于 2017-11-20 20:58:55 | 显示全部楼层
actionmain.html
5 P/ \; m+ v! v  D. N9 s
  ~: w7 G7 c/ o. V0 _+ oMain Part of The Action 操作的主要部分
* e7 S  X( p, X  }% J# H1 c6 H* [# Y' e2 H- `
"Action panel操作面板" 是定义 PowerGREP 将执行的任务的位置。操作面板上的所有选项都被安排为**部分, 但并非所有这些部分始终可见。此屏幕截图显示全部**个部分:' m& \) K6 {, E' N

9 N7 F1 m4 Z* r! a操作的主要部分始终可见, 并且始终显示一个搜索框以输入"search terms搜索字词"。在屏幕快照中, 操作的主要部分是显示搜索框的唯一部分。所有其他部分都被关闭。
. n2 l. T4 P9 W8 w. x+ ^PowerGREP 对您的操作的主要搜索字词的作用取决于您在操作面板顶部选择的 "action type操作类型"。除 "list files列表文件"、"file or folder name collect文件或文件夹名称收集" 和 "merge files合并文件" 之外的所有操作类型都需要在该操作的主要部分中有一个搜索字词。  N. A2 m! z2 M* T
操作类型还确定操作的主要部分是否显示第二个框以输入a "replacement text or a text to be collected替换文本或要收集的文本"。"search and replace搜索和替换" 和 "rename files or folders重命名文件或文件夹" 操作类型需要替换文本以替代搜索匹配项。"collect data收集数据" 和 "file or folder name collect文件或文件夹名称收集" 操作类型需要收集文本。% M) m( h/ @/ I5 v
在有关"action types操作类型"的主题中详细描述了 PowerGREP 在操作的主要部分中执行的搜索项的确切内容。通常, 主要的搜索词用于搜索文件的内容。"file or folder name search文件或文件夹名称搜索"、"file or folder name collect文件或文件夹名称的收集"、"rename files or folders重命名文件或文件夹" 操作类型使用它们来搜索文件的名称。8 n  V1 A1 o2 o, l# z6 H. R8 ~
搜索字词可以是文本、二进制数据或正则表达式。您可以通过 "search type搜索类型" 设置进行选择。如果搜索字词是正则表达式, 则要收集的替换文本或文本将使用从正则表达式引用的替换字符串语法。否则, 要收集的替换文本或文本也是文本或二进制数据。

该用户从未签到

 楼主| 发表于 2017-11-20 23:22:10 | 显示全部楼层
actionnamed.html/ m' M. C7 o; b7 m1 S5 \* [- i

* q, \4 A. f" {. e/ B1 E; j# G% s! |Action Parts and Named Capture 操作部件和命名捕获0 W8 o7 W5 G; z& H7 K" f2 g3 k

. V3 n8 P! k/ _8 t如果您对正则表达式有一定的经验, 您肯定会遇到或甚至创建了使用"capturing groups and back references 捕获组和引用"的正则表达式。正则表达式 (one)(two)(three) 与文本 onetwothree。如果将替换文本 \3\2\1 与此正则表达式配对, 则实际替换将变为 threetwoone。一个更有用的示例可能是正则表达式 \b(\d\d)/(\d\d)/(\d\d\d\d)\b 匹配日期在 dd/mm/yyyy 或 mm/dd/yyyy格式替换文本 \2/\1/\3, 以翻转天和月份的数字。
1 ?5 x% e* R! z8 L- j8 V/ k8 s( E许多现代正则表达式的风格, 包括在 PowerGREP 中使用的, 也支持named capturing groups命名捕获组。命名的捕获组和传统的已编号的捕捉群之间的唯一区别在于, 您可以使用所选的名称来引用该组, 而不是需要计算正则表达式中有多少个组的数字。它只会使您的正则表达式更易于阅读和维护。日期 regex 可以写成 \b(?'day'\d\d)/(?'month'\d\d)/(?'year'\d\d\d\d)\b 和替换文本为 ${month}/${day}/${year}。$ o) O4 i( B7 V6 T+ l) R$ r" K
PowerGREP 将命名的捕获组更进一步。通常, 捕获组只能由单个正则表达式和替换文本引用。在 PowerGREP 中, 命名的捕获组在操作面板上的所有正则表达式之间共享。由命名的捕获组捕获的文本将保留, 直到 PowerGREP 尝试再次匹配同一正则表达式, 或 PowerGREP 尝试匹配定义同一捕获组的另一个正则表达式, 或 PowerGREP 与下一个文件一起进行.只要保留了捕获组, 就可以通过引用在任何其他正则表达式或替换文本中引用它。
% f2 A/ o! w) W( K  E/ cPowerGREP 按以下顺序使用操作面板各部分的正则表达式:
/ W  |1 a) z. z- [0 k6 y1. "filter files筛选文件" 正则表达式试图检查它们是否可以匹配。
9 g; `, h' m& v0 J( s2. PowerGREP 找到 "file sectioning文件分割" 正则表达式的第一个匹配项。如果不使用文件分割, 则仅使用整个文件作为单个节来执行此列表的其余部分。  l' |+ R: i% c/ h+ m
3. PowerGREP 在"main part of the action操作的主要部分"找到式的第一个匹配, 将其搜索限制在步骤2中找到的部分。: l7 U! s- N$ ~- C+ ~5 k, t
4. PowerGREP 生成为在步骤3中找到的搜索匹配而收集的替换文本或文本。
% l- T: Z' y1 ~( Z, H" d5. 如果使用 "extra processing额外处理", PowerGREP 将对4步中的替换文本运行搜索和替换。
. v9 {* e7 j. _# _9 y4 g  Z9 k# }+ Z8 n6. 如果 PowerGREP 需要收集context上下文, 则应根据需要将上下文正则表达式应用多次, 从文件开始处开始, 或从上次停止查找上下文的位置进行。8 {" I' u4 T2 E8 ^/ G
7. 如果步骤3在片段的末尾找到了匹配项, 则 PowerGREP 返回到步骤3以搜索片段的其余部分。
) r2 K" u8 Q/ M% k1 f8. 如果步骤2在文件末尾找到了一个片段, 则 PowerGREP 返回到步骤2以查找下一片段。
  C' A5 c8 f4 V$ ~+ `如果这些操作部件中的任何一个使用了正则表达式列表, "non-overlapping search不重叠搜索" 选项就会起作用。如果此选项为 on, 则该操作部件的正则表达式列表将被视为单个正则表达式。因此, 该操作部分的每个匹配尝试都会清除这些正则表达式中定义的所有命名捕获组。如果 "不重叠搜索" 关闭, 则一次只尝试一个正则表达式。每个 regex 只清除自己的命名捕获组。PowerGREP 从列表中的第一个 regex 开始。它只继续与下一个在前一个以后不可能发现任何更多匹配。这就是为**您需要在使用 "filter files过滤器文件" 功能时关闭 "non-overlapping不重叠搜索", 以便在操作的其余部分中抓取文件的多个片段。
: n& {. D1 G" p. @示例: Insert proper HTML title tags插入适当的 html 标题标签, Rename files based on HTML title tags根据 html 标题标签重命名文件, Collect a list of header and item pairs收集标题和项对的列表, Make sections and their contents consistent使片段及其内容一致

该用户从未签到

 楼主| 发表于 2017-11-24 18:43:46 | 显示全部楼层
xmpsameline.html# C) U- i9 E* S
- ^% M9 C& n2 w! b) O
Find Two or More Words on The Same Line 在同一行中查找两个或多个单词4 A3 i5 A! j% n" t5 x5 g
8 h/ u7 s$ w! G' V9 j- M( w1 U1 ]
PowerGREP 的file sectioning文件切分功能使查找在同一行或任何其他类型的文件节中出现的单词变得很轻松。+ e- b* O( L7 O9 H; E( A- ?/ T
1. Select the files you want to search through 在文件选择器中选择要搜索的文件。! ~9 a: B: ], B+ [7 R& c
2. Start with a fresh action.从一个新的行动开始。
2 x( d6 F$ U8 r3. 将操作类型保留为 "simple search简单搜索"。5 _4 y- b5 O# I& D6 v
4. 输入两个或多个单词作为search terms搜索字词。通过将search type 搜索类型设置为 "delimited literal text 带分隔符的文本" 或 "list of literal text 文本列表", 确保将每个单词指定为单独的搜索字词。如果您输入两个或多个单词作为单个搜索词, PowerGREP 将搜索该短语, 这不是我们现在想要的。
; N, M. P9 p2 B1 w5. 打开 “line by line按行"。' \( L% q7 R! i$ n5 u2 ~% g
6. 打开 "list only sections matching all items仅列出与所有项目匹配的部分" 选项。仅当您输入了多个搜索字词时, 此选项才会出现。它告诉 PowerGREP 只显示来自节 (在这种情况下) 的匹配, 我们正在搜索的所有字词都可以找到。
$ z- ~1 {) W: }$ F7. 单击 "Preview button预览" 按钮以运行操作。
9 w; B+ q' T( ^8 A1 p- r9 Y此操作在 PowerGREP5 pgl library库中可用, 如 "在同一行中查找两个或多个单词"。

该用户从未签到

 楼主| 发表于 2017-11-24 18:58:40 | 显示全部楼层
xmplines.html% E- W$ `) R& c0 q5 E

$ U+ T4 p0 X3 \5 G# p  bExtract or Delete Lines Matching One or More Strings or Regexes 提取或删除与一个或多个字符串或式匹配的行
# f4 c) _$ O0 f' C/ f" a! q- O
, Y* |! S, ]3 G/ ^PowerGREP 的file sectioning文件切分功能使提取和删除行或任何其他类型的文件节变得微不足道。按照以下步骤提取搜索字词之一的所有匹配的行:
$ X# V$ E; V! |1. 选择文件。$ q2 C6 ]0 p# H6 g7 O2 x/ l; L% W
2. 从一个新的行动开始。; g9 N6 _3 Q. ]# n. [
3. 将动作类型设置为 "search搜索"。/ l, i0 M5 i+ n5 f
4. 在 "file sectioning文件切分" 列表中, 选择 "line by line按行"。2 T- g; V$ j7 `+ Q
5. 打开 "collect whole sections 收集整个部分" 选项。这样就可以确保将行提取为一个整体。
* c5 C2 P' c4 M# F+ K$ j) k9 B. o6. 输入一个或多个搜索字词search terms。
' M3 G# q9 o, k3 e7. 单击 "Preview button预览" 按钮以运行操作。
5 ^4 ?! U: V1 U0 N: b; @要将这些行提取到新文件中, 请将target type目标类型设置为 "save one file for each searched file 为每个搜索文件保存一个文件"。将 "between collected text 收集的文本" 设置为 "Line break 换行"。然后单击 "Collect button 收集按钮"。. F8 a2 ^1 L4 w8 T# U0 Q/ d9 C. L
要删除原始文件中的行, 请将操作类型设置为上面步骤3中的 "search and delete 搜索和删除"。如果将文件剖切类型设置为 "line by line按行", 则将对匹配行进行删除, 但文件中的行数将保持不变。如果将其设置为 "line by line (including line breaks)按行 (包括换行符)", 则将完全删除这些行, 并且文件中的行数将会缩小。
" B8 o: z+ U" `' L& G+ i8 q# N, ]' F
- J) l, k5 `( D6 t; M* V" KExtract or Delete Lines Matching All Search Terms 提取或删除匹配所有搜索字词的行9 }. ^' W; t( c# h4 O

% L4 C9 ]3 l7 u8 I上述步骤将提取或删除任何包含搜索字词之一的行。如果一行必须包含所有搜索字词以便提取或删除, 请打开 "list only sections matching all items 仅列出与所有项目匹配的部分" 选项。将文件切分类型设置为 "line by line按行" 后, 此选项变为可见。
$ ^; [3 M) ~" g. q2 }有关更复杂的搜索字词组合, 请参见example about boolean operators关于布尔运算符的示例。: B+ J4 R/ a& G
Extract or Delete Lines Matching None of The Search Terms 提取或删除与任何搜索字词都不匹配的行- N6 R8 k; ~' h+ e

; M" Z) a% x# U( g  {5 c  ]& c) H要提取或删除那些不包含任何搜索字词的行, 请在文件剖切中打开 "invert search results反转搜索结果" 选项。使用搜索字词列表时, 请确保 "list only sections matching all terms 仅列出匹配所有条款的部分"。! {: }3 P! l2 u: E4 ?; l; p$ S
Extract or Delete Lines Not Matching All of The Search Terms 提取或删除不匹配所有搜索字词的行6 ]  t7 f8 G# l( F' ?
如果您同时打开 "invert search results反转搜索结果" 和 "list only sections matching all terms仅列出与所有术语匹配的部分", 则您将提取或删除所有包含搜索字词的行, 以及包含某些但不是全部搜索字词的所有行。

该用户从未签到

 楼主| 发表于 2017-11-24 19:40:35 | 显示全部楼层
xmpboolean.html- A. L5 @, P+ _+ b+ V; l0 k: c3 I0 y

( m: l, c+ ?. GBoolean Operators “and”, “or”, and “not” 布尔运算符
6 w0 R! X5 s# k* Z3 f( j4 J# V
8 @  T# u' V9 z# x- v) X5 h许多搜索工具使用布尔运算符 "and"、"or" 和 "not"。搜索 "term1 和 term2 和 term3" ,产生一个文件列表, 其中可以找到所有三搜索字词。搜索 "term1 或 term2 或 term3" 提供了一个文件列表, 其中至少有一个搜索字词出现。搜索 "term1 而非 term2" 列出了包含 term1 但不 term2 的文件, 而 "(term1 或 term2) 而不是 (term3 或 term4)" 列出了包含 term1 或 term2 或两者兼而有之的文件, 而不是 term3 或 term4。
) d+ g+ K! V8 g: N/ i  u1 W0 gPowerGREP 不使用布尔运算符, 但提供类似的功能。
0 ^' v" n1 s, s
0 z1 A2 l' I+ w4 ^& VPowerGREP’s Implicit “or”隐含 "或"1 W9 T" ^+ t7 W* m1 P9 _
: N' R( O4 s( W; _
当您指定多个搜索字词时, PowerGREP 自动在它们之间隐含 "or" 运算符。即, 您将获得包含一个或多个搜索字词的文件列表。, u9 V- I$ X5 `; A1 L' o! w8 `
1. 选择要搜索的文件。
- N* U9 X2 ^0 n+ @6 c/ L6 q& S2. 从一个新的行动开始。
6 D$ E* m0 N+ b( S  i3 Q8 v3. 将搜索类型设置为 "list of literal text文本列表"。/ i: D/ r2 s  `6 ]( K8 _( m6 n
4. 关闭 "list only files matching all terms只列出与所有条款匹配的文件" ,在搜索字词之间隐含"或" 。5 W" J: [0 p! N4 R, @( q
5. 输入第一个搜索字词。单击 "green plus 绿色加号" 按钮可将其他搜索字词添加到列表中。
" ^4 }0 F% o0 J1 |, J1 r6. 单击 "Preview button预览" 按钮以运行操作。" g$ f& I4 u; F. Q- `1 c5 }; W
List Only Files Matching All Terms 仅列出与所有术语匹配的文件
* W; a0 X! f0 n: T1 n# d: A( t& G! ~* u8 g
5 \$ ], p& [8 d4 a如果您打开 "list only files matching all terms 仅列出匹配所有条款的文件" 选项, PowerGREP 将给出包含每个搜索项的文件的列表, 至少一次, 就像在搜索字词之间使用布尔 "and" 运算符一样。包含某些但并非全部搜索字词的文件不会显示在结果中。
3 k! v$ Y; R3 W/ Z! I1. 打开 "list only files matching all terms 只列出与所有条款匹配的文件" ,在搜索字词之间隐含 "and"。
3 e7 M4 w- i" i) c+ I, g2. 输入第一个搜索字词。单击 "green plus 绿色加号" 按钮可将其他搜索字词添加到列表中。- `$ B! n1 d$ A) G
3. 单击 "Preview button预览" 按钮以运行操作。
5 Y& {- `. c7 a) {) n) ^此操作可在 PowerGREP5. pgl library库中作为 "List files containing all search terms 包含所有搜索条件的列表文件"。
4 N) D- e) n/ y0 r" Y4 J, @List Only Lines Matching All Terms 仅列出与所有术语匹配的行
3 N- B: u3 G& w; v/ E0 w2 n使用 "list only sections matching all items 仅列出与所有项目匹配的部分" 选项, 您可以找到至少一次包含每个搜索字词的行或任何其他类型的切分, 就好像您在搜索字词之间使用了布尔 "and" 运算符一样。包含某些但并非全部搜索条件的行或节不会显示在结果中。此选项仅在使用file sectioning文件切分时出现。
1 X9 Q& d  ~" Y
: Y% e( q3 w2 P' F3 q. ^1 M/ i- |1. 输入第一个搜索字词。单击 "绿色加号" 按钮可将其他搜索字词添加到列表中。
- N% r& \7 M8 _. T5 N2. 在 “file sectioning文件切分" 列表中, 选择 "line by line按行"。
7 B$ V! z. v' x3. 在选择 "按行分段" 后出现的 "list only section matching all terms 仅列出匹配所有条款的部分" 选项。这意味着 "and" 之间的搜索条件。
! }/ j6 H1 m, ?8 ?4. 单击 "Preview button预览" 按钮以运行操作。
, `& H$ j% C9 C# N$ [此操作可在 PowerGREP5. pgl library库中作为 "Collect lines containing all search terms 包含所有搜索条件的列表文件"。
7 Z5 `( i4 Y) d+ M+ J" _/ h8 CCombining “and” and “or” 结合 "and" 和 “or"& p$ q) {+ R% G

& K1 m( N- C2 \"list only files matching all terms 只列出匹配所有条款的文件" 和 "list only sections matching all items 仅列出匹配所有项目的部分" 选项是全有或无选项。当两者都关闭时, "or" 在所有搜索词之间隐含。当任一是 on 时, "and" 在所有搜索字词之间, 在文件级别或节级别上都是隐含的。
; ?  L& Q  x# y对于 "and" 和 "or" 的组合, 您将需要使用regular expressions正则表达式。打开 "list only files/sections matching all items 仅列出与所有项目匹配的文件/分区", 以暗示 "and" 在正则表达式之间, 如上面的示例所示。然后使用alternation regex operator 交替 regex 运算符将多个搜索词合并到一个正则表达式中。交替是 regex 等价的 "or"。
' d! e( y- T  P$ N" v6 H& ?; ^7 d- w$ b/ r- T
例如, 对于布尔查询 "(Jack or John) and (Sue or Mary or Grace)", 您需要两个正则表达式, 如下所示:
" A7 Q. p5 g7 a/ ~$ g
' N% I0 U* M8 u. J1. 将search type搜索类型设置为 "list of regular expressions正则表达式列表"。+ Q! F7 k7 o& I: C& O. S; Z
2. 打开 "list only files matching all terms只列出与所有术语匹配的文件" ,在正则表达式之间隐含 "and"。
3 v4 J  g2 B. Y9 o' U9 C/ p2 q3. 输入第一个正则表达式Jack|John.如果搜索字词包含非字母数字字符, 请确保escape characters that have a special meaning in regular expressions转义在正则表达式中具有特殊含义的字符。7 J7 g1 X" F" n, c9 ?
4. 点击绿色加号按钮添加正则表达式 Sue|Mary|Grace。8 h% W5 i4 Q. A
5. 单击 "Preview button预览" 按钮以运行操作。
; d% X. y/ I; ^; n$ Y3 JFiles or Lines Not Matching Your Terms 与您的术语不匹配的文件或行6 P& x( D2 Y- n' d

$ d8 S/ T: _- d3 b. c; \布尔型搜索 "not a" 或 "not a and not b" 为您获取不包含搜索字词的文件的列表。在 PowerGREP 中, 您可以使用 "invert search results反向搜索结果" 复选框在该操作的file sectioning文件切分部分中进行。如果操作类型为list files列表文件, 则此选项为反转文件列表。您会得到不包含任何搜索字词的文件列表。( \; C5 D- L0 W+ v* b9 a: k* v
1. Select the files you want to search through in the File Selector.! p* }7 ]8 H% i! B1 W3 ^9 X
2. Start with a fresh action.
1 _5 D8 K' ~& T8 o3. 将操作类型设置为 "list files列出文件"。! w7 F( Q$ w! Q5 e- k* m  C0 _
4. 打开 "invert results反转结果" 选项。
0 q, A  X/ G# K8 S( h# C6 V5. 关闭 "list only files matching all terms 只列出与所有条款匹配的文件" 是为了暗示 "or" 在搜索字词之间。我们正在搜索 "not (a or b)" 以排除 a 和 b。
& w! w$ |2 A9 ]7 l+ W+ R6. 将search type搜索类型设置为 "list of literal text 文本列表"。" D1 A& f6 t% M7 ~$ Y
7. 输入文件不能包含的第一个搜索词。单击 "绿色加号" 按钮可将其他搜索字词添加到列表中。
; G# T5 C; O0 i6 u1 h8. 单击 "Preview button预览" 按钮以运行操作。
8 e# |0 q1 ~& ]对于所有其他操作类型, 只有在使用 PowerGREP 的文件剖分功能将文件划分为部分时, 该选项才可用。反转结果将为您提供不包含搜索条件的部分的列表。您可以获取所有不包含任何搜索字词的行, 如下所示:
/ C/ V" Z9 R5 m7 i) F1. Select the files you want to search through in the File Selector.' B4 C- a) L& s/ o8 c& c
2. Start with a fresh action.7 ?. ]7 u% e2 {) }
3. Set the search type to "list of literal text".# ~; X% T/ n9 C0 K% M+ g
4. 输入文件不能包含的第一个搜索词。单击 "绿色加号" 按钮可将其他搜索字词添加到列表中。
8 J" F# z/ N$ l2 E+ L; s( o( O5. In the "file sectioning" list, select "line by line".
% A2 Z% ]% Y4 U" @6. 打开 "invert results反转结果" 选项, 在选择 “行切分" 后出现。
2 b9 G8 L8 K( _3 z7. 关闭 "list only files matching all terms" ,在搜索字词之间暗含"or" ,我们正在搜索 "not (a or b)" 以排除 a 和 b.- I+ T5 Y7 Y/ p% t; g
8. 单击 "Preview button预览" 按钮以运行操作。% R/ U$ ?# a& v' r6 l# A
Find Some Terms, Exclude Other Terms 查找某些字词, 排除其他字词) d% h# E0 g9 {. x
+ W. J; B. a' v7 u3 t+ ]
您可以模拟布尔组合 "and not" 使用 PowerGREP 的能力, 使用第二组搜索字词在实际搜索之前筛选文件。布尔查询 "(term1 or term2) and not (term3 or term4)" 为您获取包含 term1 或 term2 或两者的文件的列表, 但不是 term3, 也不是 term4。在 PowerGREP 中, "term1 或 term2" 是主要的搜索, "不 (term3 或 term4)" 是过滤条件。PowerGREP 首先搜索 "term3 或 term4"。如果这些不能在文件中找到, 那么 PowerGREP 搜索 "term1 或 term2"。# o2 o  M# B# V5 |3 L* a5 T- l
1. Select the files you want to search through in the File Selector.
" A; A- c* G! A- r9 S' L2. Start with a fresh action.
- Y7 g6 N/ p) e$ u  n$ T3 o/ K3. Set the action type to "list files".
  k3 {7 p8 R% P/ Z3 i$ N9 w4. Set "filter files" to "disallow any terms to match".
! l2 z5 Z9 m1 k- L' w( X2 `5 A6 r% D  \5. Set the search type for the file filter to "list of literal text".5 a9 E5 g3 ~* S
6. 输入文件不能包含的第一个搜索词。单击 "绿色加号" 按钮可将其他搜索字词添加到列表中。* q2 N- ]- s6 i4 N. [4 a3 X# u4 k
7. Set the search type for main part of the action to "list of literal text".- I6 E! M/ J% T1 B% @
8. 输入文件应包含的第一个搜索字词。单击 "绿色加号" 按钮可将其他搜索字词添加到列表中。
0 h9 X4 h- R, N7 F# J* d4 K) d5 e9. Click the Preview button to run the action.
; [7 O! s8 K2 B& E, C. Z' zPowerGREP 只支持一个 "and not"。如果你有 "term1, 而不是 term2 和 term3, 而不是 term4", 你需要先重写布尔查询。首先, 把所有的否定词放在一起: "term1 和 term3, 而不是 term2, 而不是 term4"。然后使用布尔代数把 "not" 外括号, 所以只有一个 "不" 保持: "term1 和 term3 而不是 (term2 或 term4)"。现在, 您可以使用上面的步骤创建一个 PowerGREP 操作。要使文件匹配 "term1 和 term3", 请打开 "list only files matching all terms 仅列出与所有条款匹配的文件"。# F! x' V3 g) K/ f/ i
下面的屏幕截图显示了当您按照上述步骤查找 "A and not B" 时, 操作面板的外观。, S( \5 Q) d* [$ [* C( r

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

该用户从未签到

 楼主| 发表于 2017-11-24 20:49:53 | 显示全部楼层
xmpapachesplitdate.html
' `# C; R3 j' F+ B
1 n+ m# a) j) b- K( d3 C) h& I+ D1 NSplit Web Logs by Date 按日期拆分 Web 日志& s4 e8 {) p7 \
2 Z" O8 R1 f. ], `) \3 p, ~3 _, e
生成日志文件的软件通常将所有内容都转储到单个日志文件中。随着日志文件的大小的增长, 它变得难以使用。使用 PowerGREP 可以轻松地将日志拆分为多个文件, 例如每天一个文件。
8 c7 G9 r$ Z5 l* F4 a对于本例, 我们将拆分一个 Apache web log 日志, 每行存储一个日志条目, 每个条目存储的日期格式如 25/Apr/2010。"Merge Web Logs by Date 合并 Web 日志" 按日期示例的相反。! I* f+ Z2 B% H3 K
  E7 }0 o& G4 L  r
1. Select the log files you want to split in the File Selector.
/ I6 n# C* d9 k0 z5 ^! Y/ ]2. Start with a fresh action.
0 H6 H. R( M6 u2 R; ^  j" X5 E, U3. 将操作类型设置为 "split files 拆分文件"。# u; I5 \4 L# |! \
4. 在 "file sectioning文件切分" 列表中, 选择 "line by line, including line breaks按行, 包括换行"。文件中的每一行都是一个日志项。# J2 L2 H4 a8 M3 `$ g3 I* @
5. 打开 "split whole sections拆分整个部分" 选项。这将确保将行作为一个整体提取到目标文件中。
- Q3 E* |2 Z8 H( i2 u( ^6. 在 "搜索" 框中, 输入正则表达式(?'day'[0-9]{1,2}+)/(?'month'Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)/(?'year'[0-9]{4}). 只有与此 regex 匹配的行才会写入目标文件。
, e7 v( K9 b& `9 \$ h! q7. 在 "Target File box 目标文件" 框中, 在 c:\logs\web 日志行中输入一些内容, 其中包括 c:\logs\web logs ${day} ${month} ${year}.txt.bz2, 以使用包含 regex 匹配的日期的替换文本语法生成路径。具有相同目标文件的行 (在替换引用后) 被写入同一个文件。具有不同目标文件的行被写入不同的文件。我们在目标文件名中添加了一个. bz2 扩展名, 使 PowerGREP 自动压缩该文件。
- n) ?; l. q3 `3 G% R* w" M8. 设置 "between collected text 在收集的文本之间" 设置为 “nothing 无"。因为我们收集了包括换行符在内的整行, 所以不需要添加更多的分隔符。
3 X" ~$ \3 ~  u$ Q0 Z9. 需要的话, 设置backup file options备份文件选项。0 b* O( X# e0 g) @7 z7 Q* I4 Y
10. 单击 "Quick Split 快速拆分" 按钮以拆分该文件。使用此按钮而不是拆分文件。否则, PowerGREP 将浪费大量的时间和内存在结果面板上显示您的整个日志文件。
# i7 ^0 s; j1 u拆分文件不会删除原始文件。如果一个或多个搜索匹配的目标文件是通过搜索的文件, 则它可能会覆盖原始文件。当拆分文件时, PowerGREP 不会写入最终的目标文件, 直到操作完成。覆盖源文件不会更改搜索匹配项。
) P( H  w) G3 z0 o0 N# w5 g此操作在 PowerGREP5. pgl library库中可用作 "Logs: Split Apache web logs”
$ |) U: K* ~0 H5 q9 T  B7 m* m% ~  |1 M
Recombining Log Files 重组日志文件3 I& A* t5 S; X. G5 k/ s

$ Z4 O  s/ O0 ^上面的示例还可以用于重新组合日志文件。假设您的应用程序将日志文件写入特定的大小。它可能在单个日志文件中写入多达10万项, 然后从一个新文件开始。这样做可以使日志文件的大小保持可管理, 但最终会在同一个文件中的多个天中输入, 并在多个文件中从同一天输入。
4 \, g7 W+ K% C9 b8 N若要重新组合日志, 以便在一天的日志条目中有一个文件, 只需在文件选择器中用日志标记所有文件。然后执行上面描述的操作。如果来自不同文件的日志项导致相同的目标文件, 它们将被合并到该目标文件中, 即使您正在执行 "split files拆分文件" 操作。"split files拆分文件" 和 "merge files合并文件" 操作之间的关键区别在于: "split files拆分文件" 计算每个搜索匹配的目标文件, 而 "merge files合并文件" 则为搜索的每个文件计算目标文件。
9 s' a! A1 f4 P" ?9 K4 O+ o3 k4 x9 @* m8 M) M' t7 ^
"order of collected matches 收集的匹配顺序" 下拉列表确定了从不同的匹配 (本例中的日志条目) 的顺序当 "split files 拆分文件" 操作从多个文件的匹配项计算相同的目标文件路径时, 就会写入。如果希望合并文件中的日志项与原始文件中的顺序相同, 则这一点很重要。如果原始日志文件按名称的字母顺序对文件进行排序, 请选择 "排序文件 Alphabetically A.. Z". 如果日志文件上的时间戳按正确的顺序放置文件 (例如, 每个日志文件上的时间戳是最后一次ntry 是书面的), 然后您可以选择 "最旧的文件到最新的文件"。

该用户从未签到

 楼主| 发表于 2017-11-25 10:39:41 | 显示全部楼层
xmpsourcecodesection.html" i8 K' Y) L' r, ~: _

0 V* O2 D: {7 E8 u% USearch Through or Skip Source Code Comments and Strings 搜索或跳过源代码注释和字符串
& J; P6 Z4 N9 ?
- X' O1 J' O- O* d# N0 t* i在搜索或修改源代码文件时, 通常会希望将搜索限制为注释和/或字符串, 或者仅搜索注释和/或字符串。如果您发现在整个项目中 "referrer" 是 "referer" 的拼写错误, 那么您可能会想在注释和字符串中修复该错, 但不要让实际的源代码原封不动。修改源代码可能会中断与其他模块的关系, 这是一个不值得纠正拼写错误的麻烦。(作为一些琐事: Apache web 服务器将引用的 URL 存储在一个变量 HTTP_REFERER 中, 这正是原因。
: ~; A$ F# Z0 J5 vPowerGREP 在操作定义的 “file sectioning文件切分" 部分使这变得容易。下面的示例仅描述文件切分设置。按通常的方式输入实际的搜索条件。
1 D  V7 F* n5 X5 h$ F
4 R4 A# I+ T8 U0 I! YSearch Through Comments and Strings Only 仅搜索注释和字符串
$ F: F  {; o# V$ w; k- w3 r* R# o9 Q) n& ~
1. 选择 "文件", 并照常设置操作的主要部分。
/ N2 m$ D. }" m( b) D$ S% R2. 从 "file sectioning文件切分" 列表中选择 “search for sections搜索切分"。5 ?. _4 G- Q8 a9 I( _% \2 A
3. 将 “切分搜索类型" 设置为 "list of regular expressions正则表达式列表"。确保 "non-overlapping search不重叠搜索"打开。/ V/ j% c! S2 j4 r4 a) d
4. 将一个正则表达式添加到每种字符串的列表中, 并注释您正在使用支持的编程语言。对于 C 或 Java, 请使用//.*进行单行注释、(?s)/\*.*?\*/多行注释和 "[^"\\\r\n]*(?:\\.[^"\\\r\n]*)*"为字符串。第二个正则表达式中的 (s) 只为该正则表示打开 "dot matches newlines点匹配行"。确保未选中复选框。
$ \; z3 q  _2 \' E8 ?Don't Search Through Either Comments or Strings 不要搜索任何注释或字符串
0 T7 U( n0 H' D% E% R& z/ Q/ X! s9 B% y# N" ?: @. a/ k$ t
仅在源代码中搜索, 跳过注释和字符串, 也同样简单。而不是在上面的步骤2中选择 "search for sections搜索切分", 而是选择 "split along delimiters沿分隔符分割"。% F6 a; A8 A" {$ I/ v3 j
"Split along delimiters 沿分隔符分割" 意味着 PowerGREP 将注释和字符串作为分隔符处理。PowerGREP 将在注释和字符串之间的所有内容之间进行主要的操作搜索, 跳过注释和字符串本身。, H! y5 D9 _" r5 e" I5 ?
Search Through Comments Only, or Strings Only 仅搜索批注, 或仅查找字符串* {4 G8 B& n9 u9 m  {) b9 z0 v
您可能会试图清除文件剖切中的正则表达式前面的复选框, 与您不想搜索的文件部分相匹配。但是这不会产生你想要的效果。
" {" u3 y! x+ h- p5 B" J选中复选框完全禁用该正则表达式。当您在设计 PowerGREP 操作时测试不同正则表达式的效果时, 这是很有用的。在这种情况下, 这不是你想要的。如果您禁用式以匹配注释, 则字符串 regex 将匹配注释代码中的字符串。
0 E1 [. A: d, P  U要跳过某些部分, 请从 "file sectioning文件切片" 列表中选择 "search and collect sections 搜索和收集分区"。将出现一个新的切分收集框。在此框中, 为主操作应搜索的每个切片步骤输入 \0 。对应跳过的节保留空白。! G6 D2 [4 R3 v: P  ^, ?4 S/ Z; r
\0 是整个正则表达式匹配的引用。当使用您自己的正则表达式到节文件时, 您还可以使用引用来捕获常规expression. 然后, PowerGREP 将将操作的主要部分限制在该捕获组所匹配的文件部分。

该用户从未签到

 楼主| 发表于 2017-11-25 11:31:46 | 显示全部楼层
xmphtmltagnumbers.html' R! R0 d' _6 n6 P- |" H

) @% i; J% p" ^9 p6 o, M+ XMake Sections and Their Contents Consistent使切分及其内容保持一致+ y# i" S4 @4 F

. S2 g) Z, f3 S/ ]4 u) ]此示例演示如何使用named capturing groups命名捕获组从file sectioning文件切片到main part of the action操作的主要部分进行 regex 匹配。1 b+ E# ^5 a* T6 D6 S7 g
假设您有许多 HTML 文件, 其中有标题, 如 <h1>heading 4</h1>, 您要使其保持一致。4应改为1。2 O5 J& S; w- j: a, ]
PowerGREP 让这件事变得简单。使用file sectioning文件切分来匹配标题标签及其内容。然后通过标头进行main action主要操作的搜索和替换, 将标头的内容中的数字替换为从文件切分中结转的标头的嵌套级别。9 K2 z! X/ s6 F# ^, ^
0 ?3 F. ]/ o, }0 L6 v: t! O+ y
您可以在 PowerGREP5 pgl 库中找到此操作, 如 "Make numbers in HTML heading tags consistent 使 HTML 标题标签中的数字保持一致"。
2 {* `: t- j6 {# C3 }6 A* c2 E$ t
( Q" m4 {; D8 g& V8 l1. Select the files you want to search through in the File Selector.
0 D! j+ d* Q  U2. Start with a fresh action.3 i3 y  a$ Y7 ~% T. G
3. Set the action type to "search and replace".7 H7 X" X+ W7 i' h& \* h  R" i
4. Select "search and collect sections" from the "file sectioning" list. Leave the section search type as "regular expression".. q- x7 i- \  |& H+ I
5. In the Section Search box, enter the regular expression <h(?'headerlevel'[1-6])>(?'tag'.*?)</h\k'headerlevel'> and make sure to leave "case sensitive search" off. This regular expression contains two named capturing groups, "headerlevel" and "tag".6 s- z1 f+ g4 g( {; S# _
6. 在 "Section Collect 收集切分" 框中, 输入命名的引用${tag}以将主操作限制在标记的内容中。
6 R8 N" B, {7 x/ J7. 在操作的主要部分的搜索框中, 输入正则表达式 \d+ 以匹配任意数字。
4 i( k) q- ^- l) B3 W2 U% m8. 在 “Replace 替换" 框中, 输入命名的引用 ${headerlevel}
+ f: r( u0 D6 S" B9. 设置target and backup file options目标和备份文件选项。
7 M3 |( W6 d7 j10. Click the Preview button to run a test.1 t3 L; t7 h9 n9 _
11. 如果一切都很好, 请单击 "替换" 按钮更新标题。
: ]8 D; U5 T0 _: h6 Q4 S- T当 PowerGREP 执行此操作时, 每个文件都会发生以下情况:
% N5 }4 f) k. B- V+ M1. 切片 regex 与文件中的标题标记匹配, 例如 <h1>heading 4</h1>. 标题标记的编号1存储在命名组 "headerlevel" 中, 并且标记的内容heading 4存储在命名组 "tag" 中。7 a; L+ A* c+ U( b/ d  z
2. 由于切分收集设置为对命名捕获组 "tag" 的引用, 因此主操作将只搜索标题标记的内容。
1 t# A# l+ z% _3. 主操作与标题标记内容中的第一个数字4匹配。
) _! j" U4 ^% y6 a' `4. 主动作将匹配的数字替换为引用 "headerlevel" 的内容: 1# O* Z6 x* c# n# D( x# J
5. 主动作重复步骤 3 和 4, 直到替换了所有数字。在本例中, 替换后的部分成为 <h1>heading 1</h1>0 U2 E% ?' k0 \* Z' H3 ~2 K( ~" D. R
6. PowerGREP 对文件中的所有标题标记重复步骤 1 到 5。4 W1 Q% u" P& C
Updating the Heading Tags Themselves 更新标题标签本身
/ ]& O. M6 u! I1 C7 b
1 C+ ?; B& |& V5 m7 ^6 z9 O相反, 更新标题标签以使其与标签内容中的数字一致, 几乎同样容易。我们要做的是更换<h1>heading 4</h1> with <h4>heading 4</h4>" p2 Q! x8 k, d# Y8 a
您可以在 PowerGREP5 pgl 库中找到此操作, 将其视为 "使 HTML 标题标记与其内容一致"。
+ [3 t0 j* q5 I" G6 d1. Select the files you want to search through in the File Selector.
- d2 p% @4 r' {, l; V! K- q: ~8 k2. Start with a fresh action.: M8 m' d4 b  O4 D+ |
3. Set the action type to "search and replace"." V% a; q: h  R% v
4. Select "search for sections" from the "file sectioning" list. Leave the section search type as "regular expression".
( _; e$ E1 [5 k5. In the Section Search box, enter the regular expression <h(?'headerlevel'[1-6])>(?'tag'.*?)</h\k'headerlevel'> and make sure to leave "case sensitive search" off. This regular expression contains two named capturing groups, "headerlevel" and "tag".
6 |( \2 _8 {( i# A6. 打开 "replace whole sections替换整个部分" 选项。
8 _. y% Z. e$ L, q' q/ B' A% U7. 在操作的主要部分的搜索框中, 输入正则表达式\b[1-6]\b以匹配介于1和6之间的数字。word boundaries 字边界也确保我们不匹配标题标签本身的数字。- w' z3 [$ }% |: c% m/ c! I& C
8. 在 “Replace 替换" 框中, 输入 <h\0>${tag}</h\0>
$ w0 e" p; ^8 b9 d& i# m# k) ?. A9. Set the target and backup file options as you like them.
, H+ M& n/ {3 I- ]10. Click the Preview button to run a test.
# Z" ]! b3 W9 e) D* L+ M11. 如果一切都很好, 请单击 "替换" 按钮更新标题。
& i* G' ]* B( ?* n5 p2 H/ w' w8 i% [5 z3 ^当 PowerGREP 执行此操作时, 每个文件都会发生以下情况:
  I4 c" _2 K2 T1. 切片 regex 与文件中的标题标记匹配, 例如 <h1>heading 4</h1>. 标题标记的编号1存储在命名组 "headerlevel" 中, 并且标记的内容heading 4存储在命名组 "tag" 中。
3 B, e  W; F+ g8 P6 ^2. 主动作搜索整个部分, 即标签与内容。
8 @8 X- {1 k% o( Q* S* ^3. 主操作与标题标记中的第一个数字4匹配。由于我们正则表达式中的单词边界, h1 中的1是不匹配的。. F6 l& h. o" X' h$ M
4. 替换文本中的引用 \0 替换为 regex 匹配 4, 命名的引用 "tag" 被文件剖切所捕获的heading 4替换。结果是  <h4>heading 4</h4>6 Y3 m9 j" A. c. F% k& f
5. 由于我们打开 "replace whole sections 替换整个部分", 整个部分替换为替换, 并且主要行动做了与这部分。
7 H( P- h) z8 ^- j6. PowerGREP 对文件中的所有标题标记重复步骤1到5。

该用户从未签到

 楼主| 发表于 2017-11-25 19:45:19 | 显示全部楼层
xmphtmlattribute.html5 R$ ~7 I* t* y, o8 G8 G5 L
, x; @' ]7 L. k! ^2 j
Replace HTML Attributes
* z$ X3 K6 U2 v0 B. [
' U6 L0 u# e( b& q这是 PowerGREP 1.0 附带的文档中最复杂的示例之一。与大多数 grep 工具一样, PowerGREP 1.0 无法search through only certain sections of files仅通过某些部分的文件进行搜索。现在, PowerGREP 有了这个能力, 替换 HTML 属性是非常简单的。让你想知道为什么 PowerGREP 是唯一的 Windows grep 工具支持文件切分工具。0 |6 C( N: q/ H5 v
在编辑网站时, 您可能需要更新一些 HTML 标记, 以使站点的外观更加一致。假设您的 web 站点上有一些不同背景颜色的表, 并且希望为它们提供相同的颜色。但是, 您只想更新表的 “bgcolor 背景" 属性。所有其他属性应保持不变。' F5 \  W+ B, f( R9 ~  Y! O

) p2 |. t0 m# q' `9 L% n1. Select the files you want to search through in the File Selector.
" f% U* ?0 j- X2. 确保file format configuration文件格式配置通过 HTML 文件的原始 (unconverted 未转换) 内容进行搜索。预定义的 “None 无" 配置是这样做的。
; [) k: y( h9 H3. Start with a fresh action.
2 B2 w. s0 M. a: z! X7 I4. 将操作类型设置为 "search and replace搜索并替换"。将搜索类型保留为 "regular expression 正则表达式"。% N% P- ?% \2 ^; b1 m- |, A4 r
5. 从 "File Sectioning 文件切片" 下拉列表中选择 "search for sections 搜索切分"。将搜索类型保留为 "regular expression 正则表达式"。. m6 f* Z* i- |2 ?& N4 v& c" i
6. 在 "部分搜索" 框中, 输入正则表达式  <table[^>]*> 并关闭 "case sensitive search区分大小写的搜索”。" z0 i( p1 ]$ \( E1 K6 c
7. 在操作的主要部分的搜索框中, 输入正则表达式背景bgcolor=([_a-z0-9]+|'[^\\']*'|"[^\\"]*") 并确保离开 "case sensitive search 区分大小写的搜索"。此正则表达式匹配任何具有引号值、单值或引号值的背景属性。2 M9 S; c9 z9 k+ L1 P6 B
8. 在替换框中输入bgcolor=blue。每个背景属性将被替换为您在替换框中输入的任何东西。' Q: {" I3 E% D/ n7 a# V- g; C
9. Set the target and backup file options as you like them.: U0 W3 n8 l( E. r, N  [
10. Click the Preview button to run a test.8 E0 @. r! a- Q2 Z
11. If all looks well, click the Replace button to actually replace "bgcolor" attributes in "table" tags.; f! D0 A- }+ `" k: J
您可以在 PowerGREP5 中找到此操作, pgl 标准库 library为 "Replace HTML attributes 替换 HTML 属性"。( l/ j( j+ {) Z  I6 m' j
如果你很好奇, 用一个基本的 grep 工具, 它只能使用一个正则表达式进行搜索和替换, 这就是要使用的搜索模式:7 d6 o' ]" }: a! }2 U
(<table([\s\r\n]+[a-z]+(=([_a-z0-9]+|'[^\']*'|"[^\"]*"))?)*)([\s\r\n]+bgcolor=([_a-z0-9]+|'[^\']*'|"[^\"]*"))?(([\s\r\n]+[a-z]+(=([_a-z0-9]+|'[^\']*'|"[^\"]*"))?)*[\s\r\n]*>)8 ~7 ^) i1 a- u4 `
替换文本将为 \1 bgcolor=blue \7
) j( @. p' o: R* T7 G& x( ]您可以看到相同的正则表达式, 我们用它来匹配这个背景中的属性。所有其他的工具是匹配的表标签**围的属性。同样的工作原理, 但 PowerGREP 的切片能力确实使生活容易很多。

该用户从未签到

 楼主| 发表于 2017-11-25 19:45:48 | 显示全部楼层
xmpheaderitem.html) k) S2 a' w2 V' Z

* {( A8 @. W8 [3 j$ {Collect a List of Header and Item Pairs 收集页眉和项目对的列表
7 H. u$ b. B  j8 u( {7 m7 U  W3 t& v* ~9 F; o( v
本示例说明如何使用file sectioning文件切分从节中提取项目。它还显示named capturing groups命名捕获组如何将 regex 匹配从文件剖切到main part of the action操作的主要部分。这使得在每一节中找到的每一项都可以很容易地收集部分 (例如它的头) 和部分项目。
, {% p  r' u; E- ?7 p* s5 l" B* ZWindows 应用程序通常将它们的设置存储在. ini 文件中。此类文件由一个或多个标头组成, 其中有一个或多个名称和值对。, \) i" Y  V2 [$ R8 ?6 ?; A
[Header1]: L( b( U- k8 j, @
Name1=Value1
  I: c$ S! [; P6 M& sName2=Value2
8 M% S2 S/ u& A! {, d- i: `% ~[Header2]
: s$ g5 r, r# _' Z- B5 JName3=Value3
( I! K7 z+ F% L+ F& sName4=Value4+ y7 _* x  I: a# r; j
Name5=Value5; @( }  o- i4 r1 A6 D
; etc...5 M% k, z3 @0 ^5 z
使用 PowerGREP, 您可以轻松地从这样的列表中提取页眉和项目对列表。让我们从上面的列表中得出如下内容:) H6 Z( p  f9 C
Header1/Name1
8 e* n7 d7 h: l$ I% o) D, F4 d2 A4 pHeader1/Name2& G! y6 z6 h. e1 Z
Header2/Name3
+ ^8 \) O! j: S4 S$ x# ]$ y3 h: O& YHeader2/Name4
& [1 }, I* L) J8 W/ JHeader2/Name5
$ X0 W) U- p- Z4 L为此, 我们需要两个正则表达式。一个获取标题, 另一个获取每个标题的项目。对于大多数 grep 工具, 这是不可能的, 因为它们只允许使用一个正则表达式。PowerGREP 的file sectioning文件切分功能使这个任务非常简单。
0 G/ E/ \' |$ _您可以在 PowerGREP5. pgl 库library中找到此操作, 如 "Collect header/item pairs from .ini files 从. ini 文件收集页眉/项目对"。
) d7 D5 X/ Z  {4 H  o. \+ M5 c1. Select the files you want to search through in the File Selector.
( J- v- j" g4 b7 _8 _0 c6 `- [9 o2. Start with a fresh action.
3 P+ q' \9 S' Y$ a0 ^$ z: c3. 将操作类型设置为 "collect data 收集数据"。3 f, @8 c# f* l# c& X
4. 从 "file sectioning文件切分" 列表中选择 "search for sections 搜索切分"。将分区搜索类型保留为 "regular expression 正则表达式"。
% G, U  E- S$ e; h! G, Q5. 在 "部分搜索" 框中, 输入正则表达式 ^\s*\[(?'header'[^]\r\n]+)](?:\r\n\s*+[^[].*+)+, 并确保"dot matches newlines点匹配行" 关闭。此 regex 与一个标头相匹配, 其中有^\s*\[(?'header'[^]\r\n]+)]和后面的所有内容都与下一标题一起使用 (?:\r\n\s*+[^[].*+)+。它包含一个named capturing group名为捕获组 "header" 的名称。
; o$ M- X1 I5 E6 a6. 在main part of the action操作的主要部分中的搜索框中, 输入正则表达式 ^([^=;\r\n]+)=.*$, 并确"dot matches newlines点匹配行" 关闭。此 regex 匹配单个名称 = 值对, 并将名称捕获到第一个backreference引用。
) q) Y7 j3 k$ F4 _  E! c% L) s  _4 T/ h7. 在 “Collect 收集" 框中, 输入 ${header}/\1 以收集标头的名称 (从文件切片结转的命名捕获组) 和值的名称 (第一个引用), 由正斜线分隔。
/ w3 D* l9 g3 z, |! T- X' Y  V8. Click the Preview button to see the results.
2 `, R' ~+ t8 ?0 X当 PowerGREP 执行此操作时, 每个文件都会发生以下情况:; i0 `- G8 i* I1 Z5 S( I
1. 切片 regex 与. ini 文件中的某一节相匹配, 例如 [Header1]\r\nName1=Value1\r\nName2=Value2该节的标头 Header1 存储在命名组 "header" 中。
# ~( R6 D; h2 i+ T% g. L2. 主动作现在搜索这个部分, 并匹配一个name=value对, 例如 Name1=Value1
8 Z7 c, \. N! J2 b3. 主要行动替换引用在将收集的文本为这个查寻匹配, 例如 Header1/Name1。结果将添加到结果中。
( i1 A4 Q5 K& v0 B7 t! d4. 主操作重复步骤2和 3, 直到找到当前节中的所有name=value对。
- p( H8 C1 H7 i  m/ n: S  x* j5. PowerGREP 对. ini 文件中的所有节重复步骤1到4。
1 R3 h" P" f/ w2 R" f" O您可以轻松地对本示例中显示的技术进行调整, 以达到您自己的目的。6 O7 A% t, R+ F/ x
1. 创建与您感兴趣的文件中的所有节相匹配的正则表达式。/ i- V7 p' w! ^4 J" ^) u6 E
2. 将已命名的捕获组添加到要为所有项收集的节的每个部分 (页眉、页脚等) 的 regex 中。4 s$ o) P* }' ]9 o2 u
3. 创建与这些节中的每个项匹配的第二个正则表达式。此正则表达式将一次只 "看到" 一节。不必担心此 regex 与第一个 regex 匹配的部分之外的文件的任何部分。
$ ?5 O1 Q7 L- |( \% n( B4. 将命名或编号的捕获组添加到要收集的项目的每个部分的第二个 regex 中。, h9 g. A8 T! G( ^5 P" T
5. 使用引用对您在步骤2和4中添加的组组成要收集的文本。

该用户从未签到

 楼主| 发表于 2017-12-7 05:31:35 | 显示全部楼层
Alternation with The Vertical Bar or Pipe Symbol 与竖线或管道符号的交替6 K! ^/ ^8 {: p  X

$ u, I, D6 m0 p我已经解释了如何使用character classes字符类将单个字符与几个可能的字符相匹配。交替是相似的。可以使用替换将单个正则表达式与几个可能的正则表达式匹配。
6 u: |8 Z# z/ {7 I0 N如果想搜索文字文本cat or dog, 用竖线或管道符号分隔两个选项: cat|dog。如果你想要更多的选择, 只需扩展列表: cat|dog|mouse|fish。
$ `- f( _& d( q' k* x. I/ N9 N7 y
4 w' n+ z0 P: b替换运算符具有所有 regex 运算符的最低优先级。即, 它告诉 regex 引擎匹配竖线左侧的所有内容, 或竖线右侧的所有内容。如果要限制替换的范围, 则需要使用圆括号进行分组。如果我们想改进第一个例子, 只匹配整个单词, 我们将需要使用\b(cat|dog)\b。这将告诉 regex 引擎查找word boundary, 然后是cat or dog, 然后是另一个单词边界。如果我们省略了括号, 那么正则表达式引擎将搜索一个单词边界, 后跟一个cat, 或者, dog跟一个单词边界。
" E  s8 V5 p- }) g. _3 V2 {, I, T& V; j9 p$ T
Remember That The Regex Engine Is Eager 请记住, Regex 引擎非常急切
3 ~% P- L  m# M5 V4 k) k' u6 ?1 H2 C( o7 K
我已经解释了the regex engine is eager regex 引擎是急切的。一旦找到有效匹配, 它就停止搜索。其结果是, 在某些情况下, 替代品的顺序很重要。假设您希望使用 regex 与编程语言中的函数名称列表匹配:  Get, GetValue, Set or SetValue。显而易见的解决方案是Get|GetValue|Set|SetValue。让我们看看这是如何工作的字符串是 SetValue。
, M3 ]0 v; B8 y% f0 O6 R# }: M' F9 U9 d/ H# w+ Q1 Y* a
regex 引擎从G 和字符串中第一个字符的第一个标记开始。匹配失败。但是, regex 引擎在开始之前就研究了整个正则表达式。因此它知道这个正则表达式使用交替, 并且整个 regex 尚未失败。因此, 它继续使用第二个选项, 作为 regex 中的第二个 G。这场匹配又失败了。下一个标记是 regex 中的第一个。匹配成功, 引擎将继续执行字符串中的下一个字符, 以及 regex 中的下一个标记。regex 中的下一个标记是在刚刚成功匹配的 S 之后的 e。e 匹配e。下一个标记, t 匹配 t。' D3 g7 [6 m( j, H# p6 [
此时, 替换中的第三个选项已成功匹配。由于正则表达式引擎是急切的, 因此它认为只要有一个选项, 就能成功地匹配整个替换。在此示例中, regex 之外的表达式中没有其他标记, 因此整个 regex 在 SetValue 中成功地匹配了 Set。
3 u( b  {% O1 c* m' m* ]与我们的意图相反, regex 与整个字符串不匹配。有几种解决方案。一个选项是考虑到 regex 引擎是急切的, 并更改选项的顺序。如果我们使用 GetValue|Get|SetValue|Set, 则在Set前尝试 SetValue, 并且引擎与整个字符串匹配。我们还可以将四选项组合成两个, 并使用question mark问号使其成为可选的一部分: Get(Value)?|Set(Value)?。由于问号是贪婪的, 因此在Set前尝试 SetValue。# R* A" C; u1 h+ W3 T( e
$ [( r; ?/ V1 _2 a; S
最好的选择可能是表达一个事实, 我们只想匹配完整的单词。如果字符串是 SetValueFunction 的, 则不希望匹配 Set 或 SetValue。因此, 解决方案是 \b(Get|GetValue|Set|SetValue)\b 或 \b(Get(Value)?|Set(Value)?)\b.因为所有的选项都有相同的目的, 我们可以进一步优化, 以 \b(Get|Set)(Value)?\b。

该用户从未签到

 楼主| 发表于 2017-12-7 06:19:06 | 显示全部楼层
Character Classes or Character Sets 字符类或字符集
3 j/ M$ h' |. ~. t
1 N! W: {! ]. o* {! x4 E, ~# N使用 "character class 字符类" (也称为 "character set 字符集"), 可以告诉 regex 引擎只匹配几个字符中的一个。只需将要匹配的字符置于方括号中即可。如果要匹配 a 或 e, 请使用 [ae]。您可以使用这个在 gr[ae]y 匹配gray或grey。如果您不知道您正在搜索的文档是用美式**还是英国语言写的, 那么非常有用。( h8 Y! {7 m6 |1 L8 \

: U' q6 }8 {$ m8 ?8 F  a* X4 C字符类只匹配单个字符。gr[ae]y 不匹配 graay, graey 或任何这样的事情。字符类内字符的顺序无关紧要。结果是相同的。. ^: d( ]  I# f4 t" Q0 T: s: B
可以在字符类中使用连字符来指定字符范围。[0-9] 匹配一个数字在0和9之间。您可以使用一个以上的范围。[0-9a-fA-F] 匹配单个十六进制数字, 大小写变形。可以组合范围和单个字符。[0-9a-fxA-FX] 匹配十六进制数字或字母 x。同样, 字符和范围的顺序无关紧要。6 E6 K, j. v" K5 W1 S2 \" _2 }) x
字符类是正则表达式最常用的功能之一。你可以找到一个字, 即使它是拼错了, 如 sep[ae]r[ae]te 或 li[cs]en[cs]e。您可以在编程语言中找到一个带有 [A-Za-z_][A-Za-z_0-9]* 的标识符。您可以找到一个 C 样式的十六进制数字与 0[xX][A-Fa-f0-9]。3 P( C+ ^* _' V2 c7 ^% y

2 I( t* B3 m- m; Z3 W1 O% INegated Character Classes 否定字符类* B) g& S  `4 H2 p7 J. [: @$ D

2 I7 L0 s8 U6 V" u9 C, V  n在开始方括号后键入插入符号, 以否定字符类。结果是字符类与字符类中没有的任何字符匹配。与dot点不同的是, 被否定的字符类也匹配 (不可见) 换行符。如果不希望被否定的字符类与换行符匹配, 则需要在类中包含换行符。[^0-9\r\n] 匹配任何不是数字或换行符的字符。
) @  ^/ i. {0 m1 ~
# ]( F( K: ~) g8 [; z8 p重要的是要记住, 一个否定的字符类仍然必须匹配一个字符。q[^u] 不意味: "a q 没有跟随 a u"。它的意思是: "a q 后跟一个不是 a u 的字符"。它不匹配 q 在字符串 Iraq。它与 q 后有字符串的诸如 Iraq is a country 匹配。的确: 空间成为整体匹配的一部分, 因为它是 "不是 a u" 的字符, 它与上述 regexp 中的否定字符类匹配。如果希望正则表达式匹配 q, 而在两个字符串中只有 q, 则需要使用negative lookahead负预测先行: q(?!u). 但我们将在后面提到。. I; W5 F) k. r- T* T
3 _' h8 i8 N* M
Metacharacters Inside Character Classes 字符类内的元字符
' I6 |' v# o. j- T. j: a$ r% ^5 |4 c% ]; P% v% R7 _
字符类中唯一的特殊字符或元字符是右方括号]、反斜线 \、插入符号 ^ 和连字符。usual metacharacters通常的元字符是字符类内的普通字符, 不需要用反斜线来转义。要搜索星形或加号, 请使用 [+*]。如果在字符类中转义常规元字符,在 regex 中能很好地工作, 但这样做会大大降低可读性。" k" `$ _0 l; V2 T
. p7 N  ^; {8 L
要将反斜线作为字符包含在字符类中而不具有任何特殊含义, 您必须用另一个反斜线来转义它。[\\x]  匹配反斜线或 x。右括号]、插入符号 ^ 和连字符, 可以通过用反斜线转义它们, 或者将它们放在不具有特殊含义的位置来包括。3 F; ]1 ?% p% ~  S" _

* x4 `- a& x" b' u8 m  B# }要将转义插入符号作为文字包含, 请将其放置在左括号后的任何位置。[x^] 匹配 x 或 caret 插入符号。/ ~3 Z. e' h( ~5 K
! Z6 ^% b. s" D3 @1 K. Q
您可以通过将转义右方括号放在左括号之后, 或在否定插入符号之后, 来包含该右方括号。[]x] 匹配右方括号或 x. [^]x] 匹配任何不是右方括号或 x 的字符。
9 Q* T6 D! q( _+ W/ E& u" U3 C4 G8 F. f6 _8 b, W0 s& I$ o! s
连字符可以放在左括号后, 或右方括号之前, 或在否定插入符号之后。[-x] 和 [x-] 都匹配 x 或连字符。[^-x] 和 [^x-] 匹配任何不是 x 或连字号的字符。
. v4 o" N5 w  M4 Q* `+ K& b2 E% S0 ^' N0 `9 ~3 q+ C; ~. [9 b  P
许多在字符类之外工作的 regex 标记也可以在字符类内使用。这包括字符转义、八进制转义和的十六进制转义符为non-printable characters。它还包括 unicode 字符转义符和 unicode 属性。[$\u20AC] 匹配美元或欧元符号。
- N5 u9 T  ~3 D" {) E* ~/ A5 ^* Z8 `6 ^: q: }+ l' M
Repeating Character Classes 重复字符类2 y: r) }1 k  P! w5 O

- o8 o/ e7 C, N2 T: c+ E- o% L如果使用 ?, * 或 + 运算符重复某个字符类, 则您要重复整个字符类。你不只是重复它匹配的字符。regex [0-9]+ 可以匹配837以及 222。
; X$ `. x3 P8 l2 _" b. {# {: ~  u# k  d5 Z& L. O1 p( ?% J
如果要重复匹配的字符, 而不是类, 则需要使用引用。([0-9])\1+ 匹配 222 但不匹配 837。当应用于字符串 833337 时, 它与此字符串中间的 3333 匹配。如果您不想这样做, 您需要使用 lookaround。
8 R4 j5 s, \& @3 j
- F2 y. |  ]( q- [' XLooking Inside The Regex Engine 查看 Regex 引擎的内部
  Z& l( w0 ?# e! R* R/ y# o; ]/ I$ s( p  Z4 X9 T! o0 Q8 {! j( _5 U  V
如前所述: 字符类内字符的顺序无关紧要。gr[ae]y 与 grey 匹配 Is his hair grey or gray?, 因为这是最左边的匹配。我们已经看到引擎如何应用只包含字面字符的 regex。现在, 我们将看到how the engine applies a regex consisting only of literal characters它如何应用具有多个置换的 regex。即: gr[ae]y 可以匹配 gray 和 grey。! U0 p- i5 p4 ?+ ^8 i6 Y

  o: K5 c% G' j9 h% u  ?1 L* Z对于字符串中的前十二个字符, 没有任何值得注意的事情发生。在每个步骤中, 引擎都无法匹配 g, 并继续使用字符串中的下一个字符。当引擎到达第十三字符, g 是匹配的。然后, 引擎尝试将 regex 的其余部分与文本匹配。regex 中的下一个标记是文字 r, 它与文本中的下一个字符匹配。所以第三个令牌, [ae] 是尝试在下一个字符的文本 (e)。字符类为引擎提供两个选项: 匹配 a 或匹配 e。它首先尝试匹配 a, 然后失败。
6 _2 w9 N' `* _( j. F2 h但是, 由于我们使用的是正则表达式引擎, 所以在决定 regex 不能与从字符13开始的文本匹配之前, 它必须继续尝试匹配 regex 模式的所有其他排列。因此, 它继续与其他选项, 并发现 e 匹配 e。最后一个 regex 标记为 y, 它也可以与下面的字符匹配。引擎发现了一个完全匹配的文本从字符13开始。它返回grey作为匹配结果, 并没有进一步的搜索。同样, 最左边的匹配被返回, 即使我们将第一个放在字符类中, 而gray也可以在字符串中匹配。但引擎根本没有得到那么远, 因为另一个同样有效的匹配被发现了它的左边。只有当您告诉 regex 引擎在第一个匹配之后继续在主题字符串的其余部分中查找第二个匹配项时, 才会匹配gray。

该用户从未签到

 楼主| 发表于 2017-12-7 06:58:56 | 显示全部楼层
Start of String and End of String Anchors 字符串的开头和字符串锚点的末尾
. q2 c: b8 o3 m+ j3 r
( ~' @7 q6 I! s4 T" T至此, 我们已经了解了literal characters文字字符、character classes字符类和dot点。将其中一个放在 regex 中会告诉 regex 引擎尝试匹配单个字符。
+ a9 ^8 N5 e. k* R' O
. I% {2 ^+ @: H+ C锚是不同的品种。他们根本不匹配任何字符。相反, 它们匹配字符之前、之后或之间的位置。它们可用于在某个位置 "锚定" regex 匹配。插入符号 ^ 匹配字符串中第一个字符之前的位置。将 ^a 应用于 abc 匹配 a。 ^b 根本不匹配 abc, 因为 b 不能在字符串开始后匹配, 由 ^ 匹配。请参见下面的 regex 引擎的内部视图。
* `( }; P' u$ Z$ y8 w! w2 i, Q. U. h8 Y- |* Q$ U, t0 r
类似地, $ 匹配字符串中最后一个字符之后的值。c$ 匹配 abc 中的 c, 而 a$ 根本不匹配。
* A! }& a/ _1 ~8 M2 V5 N% A* o' x7 {5 S8 l) ^3 {, {
仅由定位点组成的 regex 只能找到zero-length matches零长度匹配项。这可能是有用的, 但也可以创建在本教程的末尾附近解释的complications并发。+ g3 {, x% v  @2 P, A
$ s9 O7 b6 h* a+ X, a" w
Using ^ and $ as Start of Line and End of Line Anchors 使用 ^ 和 $ 作为行的起点和末端+ M" v" V4 j6 D

( Y) r" I  D4 u* K" }; x如果有一个由多行组成的字符串, 如first line\nsecond line (其中 \n 表示换行符), 通常需要使用行, 而不是整个字符串。因此, 大多数 regex 引擎都可以选择扩展两个锚点的含义。^ 可以然后匹配在字符串的开始 (在 f 之前在上面串), 并且在每行后 (在 \n 和 s 之间)。同样, $ 仍然匹配在字符串的末尾 (在最后一个 e 之后), 也在每个换行符之前 (在 e 和 \n 之间)。7 X" J1 ^' k- `. N
' e# a+ |+ m( K( z- x; Q, z  Z
在 PowerGREP 中, ^和$总是在每一行的开始和结束处匹配。这是有意义的, 因为 PowerGREP 设计用于处理整个文件, 而不是短字符串。
3 B. \6 f0 `! n9 l& j
: |3 F+ ^8 P& y' ?3 gLine Break Characters 换行符+ a4 X/ g- U2 v2 R/ n1 L
就像dot点, anchors锚在 PowerGREP 识别newline换行 \n、回车 \r、窗体提要 \f、垂直制表符 \x0B、Latin-1 下一行控制字符 \u0085、unicode 行分隔符 \u2028 和 unicode 分页分隔符 \u2029 作为换行符字符.此外, 锚定将 CRLF 视为不可分割的一对。^ 匹配在 CRLF 和 $ 匹配在 CRLF 之前, 但两者都不匹配在 CRLF 对的中间。
6 C4 {! y7 ~' [4 ~Permanent Start of String and End of String Anchors 字符串的永久开始和字符串锚点的结束1 K6 O- A  X! Z3 O" X2 V# _- `, ^1 L
\A 只在字符串开头匹配。同样, \Z 只在字符串的末尾匹配。这两个标记在换行符上从不匹配。这在本教程中讨论的所有 regex 风格中都是如此, 甚至在您打开 "多行模式" 时也是如此。在 EditPad Pro 和 PowerGREP 中, ^和$总是在行首和行尾匹配, \A 和 \Z 仅在整个文件的开始和结尾处匹配。
4 y1 l  T' p: s" M% j$ k; z8 w' N- wStrings Ending with a Line Break 以换行符结尾的字符串
3 K* b" |, B( M. N% N7 o1 M0 G/ n9 R/ o% k- [
由于 perl 在从文件中读取一行时返回一个带有换行符的字符串, 因此, 即使在关闭多行模式的情况下, perl 的 regex 引擎也会在字符串末尾的位置之前匹配 $。无论该字符是否为换行符, Perl 也会在字符串的末尾匹配 $。所以 ^\d+$ 匹配 123 主题字符串是否为 123 或 123\n。, z4 q1 d; Y& ]9 \+ }+ S
/ |$ \+ {6 n: o! w# _" X# ]6 ]5 C
大多数现代的 regex 风格都复制了这种行为。包括 PowerGREP。
+ I6 |# T( D1 ]* ?! ^4 W! m2 g8 V% Z7 S3 x; q9 A
\Z 也在最后一个换行符之前匹配。如果只想在字符串的绝对结尾处进行匹配, 请使用 \z (小写 z 而不是大写 z)。\A\d+\z 在换行符后匹配 123\n. \z 与shorthand character class速记符类不匹配。3 ~; }( j# d) B6 A
/ d- t" R4 F9 S' G
Strings Ending with Multiple Line Breaks 以多个换行符结尾的字符串4 y" o# Z8 [* P' R3 C# X! A

1 a( ^5 S" m" n1 |3 W" R1 d如果一个字符串以多个换行符结束, 多线模式为 off, 那么在最后一个断点之前的所有风格中, 只有在最后一个换行符之前, $才会匹配。无论多行模式, 对于 \Z也是如此。
( j$ X0 c9 @/ W4 w* u6 E  z6 |0 M: ~! ?6 t8 H/ t+ B$ h2 T
Boost是唯一的例外。在 Boost 中, \Z 可以在任意数量的尾随换行符之前以及字符串末尾处匹配。因此, 如果主题字符串以三换行符结尾, 则 Boost 的 \Z 有四位置可以匹配。与其他所有的口味一样, Boost 的 \Z 与多行模式无关。当您关闭多行模式 (默认为 "增强") 时, boost 的 $ 仅匹配字符串的末尾。  Q, F; i) h9 b0 I. l! Y) w) g( x
9 O8 P% O9 F+ A9 C0 J! K: G
Looking Inside The Regex Engine 查看 Regex 引擎的内部  }7 ~3 R" ^: A2 Q: h

, O! }# |7 P" x( Z$ x当我们尝试匹配 ^4$ 到 749\n486\n4(其中 \n 代表换行符) 在多行模式下会发生什么。与往常一样, regex 引擎从第一个字符开始: 7。正则表达式中的第一个标记是 ^。由于此令牌是零长度标记, 因此引擎不会尝试将其与字符匹配, 而是与 regex 引擎到目前为止所达到的字符之前的位置相匹配。^的确匹配位置在7之前。然后引擎前进到下一个 regex 令牌: 4. 由于上一个标记为零长度, 因此 regex 引擎不会前进到字符串中的下一个字符。它保持在7。4 是一个文字字符, 不匹配 7。正则表达式没有其他的排列, 因此引擎将以第一个 regex 标记再次启动, 在下一个字符: 4. 这间, ^ 不能匹配在位置在4之前。此位置前面有一个字符, 该字符不是换行符。引擎继续在 9, 并再次失败。在 \n 下一次尝试也会失败。同样, 在 \n 之前的位置前面有一个字符 9, 该字符不是换行符。
- O% P1 R' d: `: h- E% ~( c3 r7 Q( b5 t' Z6 W# x; G
然后, regex 引擎到达字符串中的第二个4。^ 可能匹配在位置在4之前, 因为它前面有一个换行符。同样, regex 引擎前进到下一个 regex 令牌, 4, 但不推进字符串中的字符位置。4匹配 4, 引擎同时推进 regex 标记和字符串字符。现在引擎尝试匹配 $ 在位置之前 (确实: 以前) 8。美元在这里不能匹配, 因为这个位置后面跟着一个字符, 而该字符不是换行符。2 H, |) q" X5 N  z- D  t
7 ~: l* @2 }/ E* t6 W  }
然而, 引擎必须再次尝试匹配第一个令牌。以前, 它在第二个4中成功匹配, 因此引擎继续在下一个字符, 8, 其中的插入符号不匹配。同样在6和换行。1 p& B# q. a$ a! d7 w. B9 q- p3 z3 z
! ]& V  F& m7 s1 E  I5 I. E. I) T
最后, 正则表达式引擎尝试匹配字符串中第三个 4 处的首个标记。成功。在那之后, 引擎成功地匹配 4 与4。当前的 regex 标记被进行到 $, 当前字符被进行到字符串中的最后一个位置: 字符串后的 void。没有需要匹配字符的 regex 标记可以在这里匹配。甚至不是一个negated character class否定的字符类。然而, 我们试图匹配一个$符号, 和强大的$是一个奇怪的野兽。它是零长度, 因此它尝试匹配当前字符之前的位置。这并不重要, 这 "字符" 是空后的字符串。事实上, $会检查当前字符。它必须是换行符, 或者是字符串后的空值, 用于匹配当前字符之前的位置。因此在例子最后, $匹配成功。- b- x2 e- n3 y

+ m, @- e' a' Z6 H: s; i: _6 j: U  U由于 $ 是 regex 中的最后一个标记, 因此引擎发现了一个成功的匹配: 字符串中的最后 4。

该用户从未签到

 楼主| 发表于 2017-12-7 07:21:56 | 显示全部楼层
PowerGREP Assistant 助手
1 q  f' {- d. \- U- U6 Y3 @/ S3 U
$ {1 @( Q; s, \- ^" Y1 \8 N在使用 PowerGREP 时, PowerGREP 助手会显示有用的提示和错误信息。在 "View视图" 菜单中选择 “Assistant 助手" 项目以显示或隐藏 "PowerGREP 助手"。在默认布局中, 助手沿 PowerGREP 窗口的底部永久可见。在助手的标题栏上, 有一个拆分器, 您可以用鼠标拖动, 使助手更高或更短。
% S4 x# W5 h8 dHelpful Hints 帮助提示
8 P- l; j8 D0 B/ f( ~" Q! \! S0 y: k; C) ?% E) ~. @
当您使用鼠标时, 助手会解释您用鼠标指向的菜单项、按钮或其他控件的用途。当您使用键盘上的 Tab 键在不同的控件之间**键盘焦点时, 助手将描述刚刚接收到键盘焦点的控件。如果将鼠标指针移到 "助手" 上, 则 "助手" 还会解释具有键盘焦点的控件, 无论是按 Tab 还是单击了它。
% R! \  L5 S6 p. @. G9 B2 {1 H6 P9 S" N! I' K
助手的一些提示提到了对助手所描述的控件有影响或受其影响的其他项。这些都是蓝色下划线, 就像网站上的超链接一样。当您单击此类链接时, 助手会将键盘焦点**到链接所提到的项目上。由于您只能在将鼠标指针移到 "助手" 上时单击链接, 所以只有当助手描述具有键盘焦点的控件时, 才能单击链接。单击后, 助手将自动描述新激活的控件。
% f+ r! z: z3 }. \# [+ k
! h6 [6 k( t- d& p+ ]Follow Mouse 跟随鼠标# I9 W8 G4 w! p4 g' P

- I5 F# s, e+ L# t( j如果您发现该助手的提示在您**鼠标时不断变化, 请右键单击 "助手", 然后选择 "后续鼠标上下文" 菜单项。默认情况下, 该项旁边有一个复选框, 指示助手的提示跟随鼠标指针, 如上一节所述。选择 "后续鼠标" 项目将删除该复选框。然后, 助手仅显示具有键盘焦点的控件的提示。( x+ T! p; E) s( j& C1 \/ @

- I1 ^& M$ q  p! ?# f& tError Messages 错误消息3 t- h; j' q2 w1 C8 C% F' [/ A1 w

" |% t1 M# v! N9 @: p3 U0 x大多数应用程序在应用程序的顶部显示错误消息, 阻止您的应用程序视图以及任何可能会抱怨的错误。单击 "确定" 可使应用程序重新恢复生机, 但随后您必须记住问题所在, 然后才能修复它。' h# I( A1 Y. y. J* D" k

  o6 f5 ~1 U3 \* I& G  P# dPowerGREP 使用不同的方法。出现问题时, PowerGREP 使用 "助手" 面板来传递邮件。如果您关闭了助手, 它会自动弹出在最后可见的位置。6 ?- s5 u  C! w# t3 z! ~

5 a4 I8 d* z, I8 g5 B你可以通过红色标题识别错误信息。提示有黑标题。助理继续直到你解决问题显示错误消息,或者撤销错误点击撤销链接b下面的错误消息。同时,助手不显示提示或描述。如果助手在错误发生之前是不可见的,则自动关闭错误隐藏助手。否则,助理会显示提示。4 n" X+ o' r% Q! l- M

- E. \9 g$ F/ ^7 E  s; F修正问题时,错误消息会自动消失。例如,如果您单击预览按钮输入搜索文本,错误信息自动消失,如果你输入一个搜索文本并单击预览按钮。因此,您不需要排除错误,除非您希望再次看到提示。

该用户从未签到

 楼主| 发表于 2017-12-7 09:15:05 | 显示全部楼层
Atomic Grouping 原子分组# P+ p) o0 D7 E* C* F# p+ D; R

5 ?  ], b/ [  a9 H# b( u; E6 V原子组是一个组, 当正则表达式引擎退出时, 会自动丢弃该组中任何标记所记住的所有回溯位置。原子组是捕获的。语法是(?>group)。Lookaround groups也是原子的。原子分组受大多数现代正则表达式的支持, 包括 PowerGREP。PowerGREP 还支持possessive quantifiers, 这实质上是方便原子分组。8 C. U5 N( J  W
一个例子将使原子组的行为清晰。正则表达式 a(bc|b)c (捕获组) 与 abcc和 abc 匹配。regex a(?>bc|b)c (原子组) 匹配 abcc , 但不匹配 abc。2 z! x" i7 {6 v1 U4 P  P% F; r

4 g# w6 j6 C; _5 m) r当应用到 abc, 两个式将a匹配 a, bc 至 bc, 然后 c 将无法匹配在字符串的末尾。在这里他们的路径分岔。具有捕获组的 regex 已记住了该替换的回溯位置。小组将放弃它的匹配, b 然后匹配 b 和 c 匹配 c. 匹配找到!
& R% M* w/ ~) [/ W$ r+ `' O; S& r+ V
但是, 与原子组的 regex 在 bc 匹配后从一个原子组中退出。此时, 将丢弃该组内标记的所有回溯位置。在此示例中, 将放弃在字符串中第二个位置尝试 b 的替换选项。因此, 当 c 失败时, regex 引擎就没有可供选择的选项了。; n- Y7 B0 n8 V

, y6 X$ h+ z/ s% V! d当然, 上面的例子不是很有用。但它确实很清楚地说明了原子分组如何消除某些匹配。或者更重要的是, 它消除了某些匹配尝试。
1 P' `  T7 W0 a; g& D& Q+ O& H  `2 J& N$ U9 I! R8 w
Regex Optimization Using Atomic Grouping使用原子分组的 Regex 优化' C# r/ w" \. S3 s( ?

" ]& {9 ?9 }$ p  B* L' ?考虑正则表达式 \b(integer|insert|in)\b 和主题integers。显然, 由于word boundaries单词的边界, 这些不匹配。不太明显的是, 正则表达式引擎将花费相当多的精力来计算这一点。
0 @7 `; c+ S* M5 b. A
! m1 o, r9 ~4 r; G) N* I\b 在字符串开头匹配, integer匹配integer。regex 引擎会注意到该组中还有两个备选方案, 并将继续使用 \b。这在 r 和 s 之间无法匹配。因此, 引擎回溯尝试in的第二个选择。第二个选项匹配, 但无法匹配 s。因此, 发动机回溯再次到第三个选择。in匹配in, n 和 t 之间的\b失败。regex 引擎没有更多记住的回溯位置, 因此它声明失败。3 Z. `6 a# g! P+ X  G. a; m1 D8 _

" I" _  m, l/ z  d这是相当多的工作, 以找出integers不在我们的单词列表。我们可以通过告诉正则表达式引擎来优化它, 如果它在匹配integer后不能匹配, 那么它就不应该去尝试任何其他单词。我们在主题字符串中遇到的单词是一个较长的单词, 它不在我们的列表中。
# [4 z1 j" H8 I
" m) k( z0 t7 p; y我们可以通过将捕获组转换为一个原子组来做到这一点: \b(?>integer|insert|in)\b。现在, 当integer匹配时, 引擎退出原子组, 并丢弃它为替换而存储的回溯位置。当 \b 出现故障时, 引擎会立即放弃。在扫描大文件以寻找一长串关键字时, 这种节省可能非常重要。当您的替代品包含repeated tokens重复的标记 (更不用说重复的组) 导致catastrophic backtracking灾难性回溯时, 这一节省将至关重要。
" F, O. y) L( a0 R2 t+ m0 A0 h9 Q# m0 K2 {5 i8 ~( B( f% M0 a7 O
不要太快, 使所有的小组原子。正如我们在上面的第一个例子中看到的, 原子分组也可以排除有效匹配。在应用于插入时, 比较 \b(?>integer|insert|in)\b and \b(?>in|integer|insert)\b 的行为。前 regex 匹配, 而后者则失败。如果这些组织不是原子的, 两个式会匹配。请记住, 交替尝试从左向右的选择。如果第二个正则表达式匹配, 则它不会尝试其他两个替代项, 因为原子组。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

小黑屋|手机版|Archiver|PDAWIKI |网站地图

GMT+8, 2024-4-26 11:04 , Processed in 0.070756 second(s), 11 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表