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

gie*_*sar 21 windows command-line-interface windows-command-prompt

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

tasklist | find /N " " | findstr /r \[[0-9]\]
Run Code Online (Sandbox Code Playgroud)

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

上面的代码有效,但我需要指定任何 range。由于正则表达式不是根据 Windows 中的标准实现的,因此我无法使用其他任何东西。

如何从 cmd 输出中提取任意行?使用单衬纸做到这一点很重要。没有脚本!

Rya*_*ies 40

电源外壳。

PS C:\> netstat | Select -First 20

编辑:我有一种感觉,你会坚持认为你只能使用大约 1989 年的 cmd.exe,但事实并非如此。Powershell 被嵌入到每个操作系统版本 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
Run Code Online (Sandbox Code Playgroud)

将显示 netstat 输出的前 10 行。

  • 我毫不怀疑 PowerShell 是未来,但我现在需要一些有用的东西。在企业现实中,我们技术支持部门的客户通常有数百台 Windows 服务器,其中没有一台装有 Vista、7 或 8。我不可能在每次需要运行命令时浪费时间安装 PowerShell,我也不是甚至授权。 (5认同)
  • 请不要忘记......将答案标记为......接受...... :`( *蜷缩在角落里的胎儿位置并对自己抽泣* (2认同)

von*_*and 8

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

  • 不,我以为我说清楚了,但我无法安装任何东西。它必须与 Windows 命令处理器 (cmd.exe) 一起运行。没有 PowerShell,没有 CygWin,没有脚本。 (2认同)

Pac*_*ier 5

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

dir/o-d让我们以(按日期逆序)的输出dir为例。

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

dir/o-d|findstr/n ^^|findstr "^[1-9]: ^1[0-6]:"
Run Code Online (Sandbox Code Playgroud)

例如,如果您想输出第 16 至 45 行,请使用:

dir/o-d|findstr/n ^^|findstr "^1[6-9]: ^[2-3][0-9]: ^4[0-5]:"
Run Code Online (Sandbox Code Playgroud)

示例输出:

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
...
Run Code Online (Sandbox Code Playgroud)

分解:

  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"a表示查找与表达式、b或匹配的字符串c

另请参阅/sf/ask/619140791/