Windows에서 명령 출력의 첫 N 줄을 표시하는 방법은 무엇입니까? (유닉스 명령어“head”와 동일)


17

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

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

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

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

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


.....................
giecsar

답변:


36

파워 쉘.

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


5
PowerShell이 ​​미래라는 것은 의심의 여지가 없지만 지금 작동하는 것이 필요합니다. 엔터프라이즈 환경에서 종종 기술 지원 부서의 고객은 수백 대의 Windows 서버를 보유하고 있으며 그 중 어느 서버도 Vista, 7 또는 8을 가지고 있지 않습니다. 명령을 실행할 때마다 PowerShell을 설치하는 데 시간을 낭비 할 수도 없습니다. 심지어 권한이 있습니다.
giecsar

Cmd.exe는 ...
Ryan Ries

그들이 필요한 것은 하나의 w2k8r2 서버로 powershell 명령을 실행하기 위해 로그인 할 수 있습니까?
tony roth

2K8 서버가 있는지 모르겠지만 Ryan Ries의 대답은 정확히 내가 필요한 것입니다. 라이언 감사합니다!
giecsar

1
잊지 말아주세요 ... 대답을 ... 수락 된 것으로 표시하십시오 ... :`( 모퉁이에서 태아의 위치에 말려 있고 스스로에게 졸립니다
Ryan Ries

8

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


2
아니요, 명확하게 생각했지만 아무것도 설치할 수 없습니다. Windows 명령 프로세서 (cmd.exe)로 실행해야합니다. PowerShell, CygWin, 스크립트가 없습니다.
giecsar

3

" 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


그것은 좋은 해결책이지만, 이제 거기에 번호가 붙습니다. 마지막 findstr 호출에서 그것들을 제거 할 수 있습니까?
fschmitt 2016 년

@fschmitt, findstr제거 할 수 없습니다. 그런 경우 루프를 사용해야 할 수도 있습니다.
Pacerier

0

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

@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.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.