How to do what head, tail, more, less, sed do in Powershell?
在Windows上,使用Powershell,与Linux的
1 2 3 4 5 6 | gc log.txt | select -first 10 # head gc -TotalCount 10 log.txt # also head gc log.txt | select -last 10 # tail gc -Tail 10 log.txt # also tail (since PSv3), also much faster than above option gc log.txt | more # or less if you have it installed gc log.txt | %{ $_ -replace '\\d+', '($0)' } # sed |
这对于小文件已经足够好了,较大的文件(超过几个MiB)可能会有点慢。
PowerShell社区扩展包括一些用于专用文件内容的cmdlet(例如Get-FileTail)。
这是执行
1 2 3 | gc log.txt -head 10 gc log.txt -tail 10 gc log.txt -tail 10 -wait # equivalent to tail -f |
Windows上存在
PowerShell确实没有为单独的程序提供任何替代方法,但是对于结构化数据
但是,随着PowerShell通过(.NET)对象–具有其所有类型结构,例如。日期保留为
在这种情况下,"-TotalCount"的响应与" -head"完全一样。您必须使用-TotalCount或-head来运行类似的命令。但是-TotalCount具有误导性-实际上无法为您提供任何计数...
1 2 | gc -TotalCount 25 C:\\scripts\\logs\ obocopy_report.txt |
在PS 5.1中测试的上述脚本是如下的SAME响应...
1 2 | gc -head 25 C:\\scripts\\logs\ obocopy_report.txt |
因此,只需使用" -head 25"!
如果您需要在Windows上查询大型(或小型)日志文件,我发现的最好的工具是Microsoft的免费Log Parser 2.2。您可以根据需要从PowerShell调用它,它将为您完成所有繁重的工作,而且速度非常快。
我有一些更好的解决方案:
1 2 3 | gc log.txt -ReadCount 5 | %{$_;throw"pipeline end!"} # head gc log.txt | %{$num=0;}{$num++;"$num $_"} # cat -n gc log.txt | %{$num=0;}{$num++; if($num -gt 2 -and $num -lt 7){"$num $_"}} # sed |
1 2 3 4 5 6 7 8 | $Push_Pop = $ErrorActionPreference #Suppresses errors $ErrorActionPreference ="SilentlyContinue" #Suppresses errors #Script #gc .\\output\\*.csv -ReadCount 5 | %{$_;throw"pipeline end!"} # head #gc .\\output\\*.csv | %{$num=0;}{$num++;"$num $_"} # cat -n gc .\\output\\*.csv | %{$num=0;}{$num++; if($num -gt 2 -and $num -lt 7){"$num $_"}} # sed #End Script $ErrorActionPreference = $Push_Pop #Suppresses errors |
您无法通过pushpop代码获得所有错误
顺便说一句,您的代码仅适用于" sed"选项。除gc和path之外,其余所有内容均忽略其他任何内容。