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 行。
有一个简单的解决方案,比使用“ 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)
分解:
首先,使用 转储整个输出dir/o-d
。
接下来,在每行前面加上“ $Num:
”,使用findstr/n ^^
^
意味着匹配行首,并且^^
只是需要转义版本,因为我们在 cmd 中。
注意:您需要使用findstr
此选项,因为find/n" "
不会匹配没有空格的行。
最后,使用 裁剪输出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
。
归档时间: |
|
查看次数: |
107571 次 |
最近记录: |