如何合并 Windows Powershell 选择字符串



这个命令有效,但想知道是否有更简洁的方法。例如,更少的管道,更少的命令,更少的开关等。主要是,字符较少。

get-childitem *  -recurse | select-string  "some string"  | select -expandproperty Path | select -uniq

感谢!

您不需要执行唯一选择。 select-string-List 参数将确保每个文件只有一个匹配项。

(ls * -r|sls 'foo' -lis).path

或者,根据以下评论进行修改:

(ls -r|sls 'foo' -lis).path

您可以从一些内置的别名开始:

ls -r | sls 'some string' | % path | select -u

细节:

ls -> Get-ChildItem
-r -> -Recurse
sls -> Select-String
% -> ForEach-Object
select -> Select-Object
-u -> -Unique

您可以指定一个路径,带有通配符,以Select-String ,因此这可能非常短。

(Select-String 'pattern' *.*).Path | Select -Unique

如果您使用别名sls Select-String它会变得更短。

(sls 'pattern' *.*).Path | Select -Unique

编辑:如前所述,上述内容不进行递归搜索。要做到这一点,你必须做一些与@RachelDuncan建议非常相似的事情。

ls * -r | sls 'pattern' | Select -Exp Path -U

比较到目前为止给出的两个答案,我从@TheMadTechnician开始,因为它使用更少的管道 - 在美国键盘上键入管道需要按SHIFT键,因此更少的管道=更少的SHIFT=更少的击键。

然后我从ls命令中删除了*,这是不必要的。

就像@Rachel邓肯的答案一样,我将所有命令和开关转换为小写,它们不需要是大写的——这消除了更多的 SHIFT 按下。

我删除了管道周围的所有空间,它们是不必要的

@Rachel邓肯:46个字符,3班倒

ls -r | sls 'some string' | % path | select -u

@The 疯狂技术员:45个字符,6班制

ls * -r | sls 'pattern' | Select -Exp Path -U

@Johny 原因:40 个字符,2 班制

ls -r|sls 'textarea'|select -exp path -u

不过,这似乎应该更容易。在我标记已解决之前,任何人都可以提供更简洁的方法吗?

也许使用Windows命令行,而不是Powershell?(tho',我想从技术上讲,这不会回答这个问题,因为我使用 PowerShell 指定。也许堆栈允许在注释中使用命令行解决方案? :)

这是

到目前为止最好的答案:

(ls -r|sls 'foo' -list).path

我删除了 *,并在 -list 上添加了缺少的 t。

28 个字符,3 班制

相关内容

  • 没有找到相关文章

最新更新