如何在Windows中显示命令输出的前N行?(相当于Unix命令“ head”)


17

我需要一个等效的Unix head命令(显示输出的前N行)。这是我目前正在使用的:

tasklist | find /N " " | findstr /r \[[0-9]\]

上面的代码显示tasklist的输出的前10行。find /N " "在每行的开头添加行号,同时findstr /r \[[0-9]\]使用正则表达式提取前10行。

上面的代码有效,但是我需要指定任何range。由于正则表达式未按照Windows中的标准实现,因此我无法进行其他任何操作。

如何从cmd输出中提取任意行?使用单缸衬管执行此操作很重要。没有脚本!


.....................
giecsar

Answers:


36

电源外壳。

PS C:\> netstat | Select -First 20

编辑:我有种感觉,您将坚持认为您只能使用1989年左右的cmd.exe,但这不是事实。Powershell被包含在每个OS版本的Vista +中,并且可以在XP / 2003上安装。这 Windows的未来。

编辑:好的,随便你吧。

C:\> netstat -an > temp.txt && for /l %l in (1,1,10) do @for /f "tokens=1,2* delims=:" %a in ('findstr /n /r "^" temp.txt ^| findstr /r "^%l:"') do @echo %b

将显示netstat输出的前10行。


5
我毫不怀疑,PowerShell是未来,但是现在我需要一些可行的东西。在企业环境中,我们技术支持部门的客户经常有数百个Windows服务器,而其中没有Windows Vista,7或8。我不必浪费时间在每次需要运行命令时安装PowerShell,我也不是甚至授权。
giecsar

Cmd.exe它是...
Ryan Ries

他们所需要的只是一台他们可以登录以运行powershell命令的w2k8r2服务器,这可能吗?
托尼·罗斯

我不知道是否有2K8服务器,但是Ryan Ries的答案正是我所需要的。非常感谢Ryan!
giecsar

1
请别忘了...将答案标记为...接受...:`(in缩在角落的胎儿位置,然后对自己抽泣
Ryan Ries

8

如果您是Unix类型的人,也许安装CygWin给您一个更熟悉的环境。


2
不,我以为我说清楚了,但是我什么也不能安装。它必须与Windows命令处理器(cmd.exe)一起运行。没有PowerShell,没有CygWin,没有脚本。
giecsar

3

有一个简单的解决方案比使用“ for”循环容易得多。

让我们以dir/o-ddir按日期倒序)的输出为例。

例如,如果要输出第1至16行,请使用:

dir/o-d|findstr/n ^^|findstr "^[1-9]: ^1[0-6]:"

例如,如果要输出第16到45行,请使用:

dir/o-d|findstr/n ^^|findstr "^1[6-9]: ^[2-3][0-9]: ^4[0-5]:"

样本输出:

16:08/08/2016  08:43 AM    <DIR>          nacl_sdk
17:11/05/2016  10:48 PM    <DIR>          3b 2
18:28/04/2016  02:47 PM    <DIR>          sample
19:22/04/2016  10:07 PM    <DIR>          mysql test
20:16/04/2016  01:22 AM    <DIR>          3b
21:16/04/2016  01:10 AM             2,706 errorlog
22:16/04/2016  12:53 AM                 0 accesslog
...

分解:

  1. 首先,使用转储整个输出dir/o-d

  2. 接下来,$Num:使用“findstr/n ^^

    • ^表示匹配行的开头,^^只是我们需要的转义版本,因为我们在cmd中。

    • 注意:您需要为此使用findstr,因为find/n" "它将不匹配没有空格的行。

  3. 最后,使用裁剪输出findstr "^1[6-9]: ^[2-3][0-9]: ^4[0-5]:"

    • ^1[6-9]: 是16到19的正则表达式。

    • ^[2-3][0-9]: 是20-39的正则表达式。

    • ^4[0-5]: 是40到45的正则表达式。

    • findstr "a b c"手段查找匹配任何表情哪些字符串abc

另请参阅/programming//q/8844868/632951


这是一个很好的解决方案,但是您现在在其中添加了数字前缀,可以在上一个findstr调用中摆脱它们吗?
fschmitt 2015年

@fschmitt,findstr无法删除内容。我认为在这种情况下,您可能会被迫使用循环。
Pacerier,2015年

0

这是一个单行命令,我希望它也对您有用。

@echo off&cls&for /f "tokens=*" %a in (Graph.bat) do echo %a&for /f "skip=1 tokens=*" %a in (Graph.bat) do echo %a&for /f "skip=2 tokens=*" %a in (Graph.bat) do echo %a&for /f "skip=3 tokens=*" %a in (Graph.bat) do echo %a&for /f "skip=4 tokens=*" %a in (Graph.bat) do echo %a&pause>nul

:: Run this from CMD.exe and make sure that your file is in your current working directory.

::Replace Graph.bat with your file.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.