如何合并windows powershell select-string?
How to consolidate windows powershell select-string?
此命令有效,但想知道是否有更简洁、简洁的方法来执行此操作。例如,更少的管道、更少的命令、更少的开关等。主要是更少的字符。
get-childitem * -recurse | select-string "some string" | select -expandproperty Path | select -uniq
谢谢!
您可以从一些内置别名开始:
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
如果您为 Select-String
使用别名 sls
,它会变得更短。
(sls 'pattern' *.*).Path | Select -Unique
编辑: 正如所指出的,上面没有进行递归搜索。要做到这一点,您必须做一些与@RachelDuncan 建议的非常相似的事情。
ls * -r | sls 'pattern' | Select -Exp Path -U
比较目前给出的两个答案,我从@TheMadTechnician 开始,因为它使用更少的管道——在美式键盘上输入管道需要按下 SHIFT 键,所以更少的管道 = 更少的 SHIFT = 更少的击键。
然后我从 ls
命令中删除了 *
,这是不必要的。
就像@Rachel Duncan 的回答一样,我将所有命令和开关都转换为小写,它们不需要大写——这消除了更多的 SHIFT 按键。
而且我删除了管道周围的所有空间,它们是不必要的
@Rachel Duncan:46 个字符,3 个 SHIFTS
ls -r | sls 'some string' | % path | select -u
@The Mad Technician:45 个字符,6 个 SHIFTS
ls * -r | sls 'pattern' | Select -Exp Path -U
@Johny 为什么:40 个字符,2 个 SHIFTS
ls -r|sls 'textarea'|select -exp path -u
不过,这似乎应该更容易。在我标记为已解决之前,任何人都可以提供更简洁的方法吗?
也许使用 Windows 命令行,而不是 powershell? (不过,我想从技术上讲这不会回答这个问题,因为我指定使用 powershell。也许 stack 会允许在评论中使用命令行解决方案?:)
您不需要 select 独一无二。 select-string
的 -List
参数将确保每个文件只匹配一个。
(ls * -r|sls 'foo' -lis).path
或者,根据以下评论修改:
(ls -r|sls 'foo' -lis).path
这是迄今为止的最佳答案:
(ls -r|sls 'foo' -list).path
我删除了 *,并在 -list 中添加了缺失的 t。
28 个字符,3 个班次
此命令有效,但想知道是否有更简洁、简洁的方法来执行此操作。例如,更少的管道、更少的命令、更少的开关等。主要是更少的字符。
get-childitem * -recurse | select-string "some string" | select -expandproperty Path | select -uniq
谢谢!
您可以从一些内置别名开始:
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
如果您为 Select-String
使用别名 sls
,它会变得更短。
(sls 'pattern' *.*).Path | Select -Unique
编辑: 正如所指出的,上面没有进行递归搜索。要做到这一点,您必须做一些与@RachelDuncan 建议的非常相似的事情。
ls * -r | sls 'pattern' | Select -Exp Path -U
比较目前给出的两个答案,我从@TheMadTechnician 开始,因为它使用更少的管道——在美式键盘上输入管道需要按下 SHIFT 键,所以更少的管道 = 更少的 SHIFT = 更少的击键。
然后我从 ls
命令中删除了 *
,这是不必要的。
就像@Rachel Duncan 的回答一样,我将所有命令和开关都转换为小写,它们不需要大写——这消除了更多的 SHIFT 按键。
而且我删除了管道周围的所有空间,它们是不必要的
@Rachel Duncan:46 个字符,3 个 SHIFTS
ls -r | sls 'some string' | % path | select -u
@The Mad Technician:45 个字符,6 个 SHIFTS
ls * -r | sls 'pattern' | Select -Exp Path -U
@Johny 为什么:40 个字符,2 个 SHIFTS
ls -r|sls 'textarea'|select -exp path -u
不过,这似乎应该更容易。在我标记为已解决之前,任何人都可以提供更简洁的方法吗?
也许使用 Windows 命令行,而不是 powershell? (不过,我想从技术上讲这不会回答这个问题,因为我指定使用 powershell。也许 stack 会允许在评论中使用命令行解决方案?:)
您不需要 select 独一无二。 select-string
的 -List
参数将确保每个文件只匹配一个。
(ls * -r|sls 'foo' -lis).path
或者,根据以下评论修改:
(ls -r|sls 'foo' -lis).path
这是迄今为止的最佳答案:
(ls -r|sls 'foo' -list).path
我删除了 *,并在 -list 中添加了缺失的 t。
28 个字符,3 个班次