PowerShell - 如何搜索整个单词(或)精确匹配

6
这是我的要求。
我需要查找我的解决方案中是否引用了某个CSS类,该解决方案包含120多个aspx页面。
这是我们编写的命令。
gci . -include *.aspx -recurse | select-string -pattern ".rtop" -caseSensitive >> D:\CSSResult.txt

然而,这甚至匹配中间带有rtop的单词。也就是说,如果我有一个名为dirtopy的变量,它会出现在结果列表中。我不想要那个。
只有当找到 .rtop 的精确匹配时,才希望它出现在结果中。你该怎么做?
任何参考或示例都将足够。
谢谢!
2个回答

12

尝试使用select-string -pattern "\.rtop\b"

您需要转义点,否则它将匹配任何字符;并且\b单词边界锚确保单词在rtop之后不会继续。


太棒了!谢谢!但是,它也返回了一个字符串出现的rtop*。有什么特别的原因吗? - Kanini
你是指在 rtop 后面加上星号吗?是的,这个正则表达式允许这样做;它只检查单词边界,并且在字母和非字母数字字符(如 *)之间有一个边界。你想在 rtop 后面允许什么 - 空格还是字符串结尾?如果是这样,请用 (?=\s|$) 替换 \b - Tim Pietzcker

5
您可以使用select-string的-simplematch选项进行字面匹配而不是正则表达式。

谢谢!但是,如果我有一个文件,其中包含以下文件扩展名:.rtop、.rtop1、.rtop和dirtopy,那么使用简单匹配选项会返回所有出现的.rtop、.rtop1和.rtop(只排除dirtopy)。那么,这是否意味着它返回所有字符串出现,其中第一组字符是rtop?但这与MSDN所说的“如果指定了此参数,Cmdlet执行简单匹配而不是正则表达式匹配。”不符合吗? - Kanini
这意味着它将返回所有包含字面字符串“.rtop”的行。不同之处在于如何处理点号。使用-simplematch,它必须匹配一个点。使用正则表达式,它将匹配该位置上的任何单个字符,因为正则表达式中的点号表示“任何字符”。您可以通过对“.rtop”进行简单匹配(在末尾添加空格以进一步限定匹配)来排除任何带有字符的内容。 - mjolinor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接