我需要一个等价的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 ...
分解:
findstr
的正则expression式实际上正常工作。 你的问题是逃避 。 (有关详情,请参阅Rob的参考资料 。) 首先,使用dir/od
转储整个输出。
接下来,使用findstr/n ^^
前面加上“ $Num:
”
^
表示匹配的开始行,而^^
只是它的转义版本,因为我们是在cmd中。
注意:因为find/n" "
不能匹配没有空格的行,所以你需要使用findstr
。
最后,使用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式a
, b
或c
string。
(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。
::这是一个单行命令,我希望它也适用于你。