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

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

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

上面的代码显示了tasklist输出的前10行。 find /N " "在每行的开头预先加一行号,而findstr /r \[[0-9]\]使用正则expression式提取前10行。

上面的代码工作,但我需要指定任何范围 。 由于正则expression式没有按照Windows的标准来实现,所以我无法得到任何其他的工作。

我如何从cmd输出中提取任意行? 用单线做这件事很重要。 没有脚本!

电源shell。

PS C:\> netstat | Select -First 20

编辑:我有一种感觉,你会坚持只能使用大约1989年的cmd.exe,但事实并非如此。 每个操作系统版本Vista +都会包含Powershell,并且可以在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行。

如果你是一个Unixtypes的人,也许安装CygWin给你一个更熟悉的环境。

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

dir/od (以date逆向sorting)为例,

例如,如果你想输出1到16行,使用:

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

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

 dir/od|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 ... 

分解:

  • 除了不受支持的function , findstr的正则expression式实际上正常工作。 你的问题是逃避 。 (有关详情,请参阅Rob的参考资料 。)
  1. 首先,使用dir/od转储整个输出。

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

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

    • 注意:因为find/n" "不能匹配没有空格的行,所以你需要使用findstr

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

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

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

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

    • findstr "abc"表示查找匹配expression式abcstring。

另请参阅https://stackoverflow.com/q/8844868/632951

(Graph.bat)do echo%a&for / f“skip = 1 tokens = ”%a in(Graph.bat)do echo%a&for / f“skip = 2 tokens = (Graph.bat)中执行echo a %(a)(a)(a)。蝙蝠)做echo%a&pause> nul

::从CMD.exe运行,并确保您的文件在您当前的工作目录。

::用你的文件replaceGraph.bat。

::这是一个单行命令,我希望它也适用于你。