PowerShell 1.0中的'grep'

cou*_*011 5 powershell grep

我想在文件中的任何位置找到包含"navbar"一词的文件.我可以使用Mac的grep命令这样做:

grep -R "navbar" *
Run Code Online (Sandbox Code Playgroud)

PowerShell 1.0中的等价物是什么?

Joe*_*oey 7

findstr /s "navbar" *
Run Code Online (Sandbox Code Playgroud)

这是一个本地命令,但应该运作良好.

PowerShell 1.0本身有点棘手,因为Select-String(直接等效)仅存在于2.0以来,我认为.所以你必须做的事情如下:

Get-ChildItem -Recurse |
  ForEach-Object {
    $file = $_
    ($_ | Get-Content) -cmatch 'navbar' |
      ForEach-Object { $file.Name + ':' + $_ }
  }
Run Code Online (Sandbox Code Playgroud)

精简版:

ls -r|%{$f=$_;($_|gc)-cmatch'navbar'|%{$f.Name+":$_"}}
Run Code Online (Sandbox Code Playgroud)

这非常字面意思:

  1. 递归查找所有文件(-R部分).
  2. 读取每个文件并使用文件名打印匹配行.

  • 呃,过时软件的用户不好.请安装PowerShell v2.并且`findstr`*有效*.其余的只是模仿它的输出.如果你只对`navbar`出现的文件感兴趣(而不是它所在的行),那么`gci -r |?{(gc $ _) - cmatch'navbar'}`就是这样. (5认同)
  • 仅仅是一个FYI,路径%windir%\ system32\windowspowershell\v1.0并不意味着你有powershell 1.0 - 这是早期版本化版本决定的一个不幸的副作用.这是powershell 1,2和3的位置(最新版本.) - 要查看powershell版本,请检查$ psversiontable变量.如果它不存在,则为1.0.如果确实存在,请查看PSVersion属性 (2认同)