Windows에서 명령 출력의 첫 N 줄을 표시하는 방법은 무엇입니까? (유닉스 명령어“head”와 동일) 시작 부분에 줄 번호를 추가하고 findstr /r

유닉스 head명령 과 동일해야합니다 (출력의 첫 N 줄을 표시하십시오). 이것이 현재 사용중인 것입니다.

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

위의 코드는 출력의 처음 10 줄을 표시합니다 tasklist. find /N " "각 행의 시작 부분에 줄 번호를 추가하고 findstr /r \[[0-9]\]정규 표현식을 사용하여 처음 10 줄을 추출합니다.

위의 코드는 작동하지만 범위지정해야합니다 . 정규 표현식이 Windows의 표준에 따라 구현되지 않았기 때문에 다른 작업을 수행 할 수 없습니다.

cmd 출력에서 ​​임의의 줄을 추출하는 방법은 무엇입니까? 하나의 라이너 로이 작업을 수행하는 것이 중요합니다. 스크립트가 없습니다!



답변

파워 쉘.

PS C:\> netstat | Select -First 20

편집 : 1989 년경 cmd.exe 만 사용할 수 있다고 주장하지만 사실이 아닙니다. Powershell은 모든 OS 버전 Vista +에 포함되어 있으며 XP / 2003에 설치할 수 있습니다. 그것은 이다 윈도우의 미래.

편집 : 좋아, 당신의 방법을 가지고있다.

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 줄을 표시합니다.


답변

Unix 유형의 사람 이라면 CygWin 을 설치 하면 더 친숙한 환경을 얻을 수 있습니다.


답변

for“루프를 사용하는 것보다 훨씬 쉬운 솔루션이 있습니다.

출력을 dir/o-d( dir날짜순으로 역순으로) 예로 들어 봅시다 .

예를 들어 라인 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"수단 중 하나를 표현 일치하는 문자열을 찾아 a, b또는를 c.

또한 참조 /programming//q/8844868/632951


답변

이것은 한 줄짜리 명령이며, 그것이 당신에게도 효과가 있기를 바랍니다.

@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.


답변