유닉스 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
...
고장:
- 이외에도에서 지원되지 않는 기능 ,
findstr
의 정규식 실제로는 제대로 작동합니다. 문제는 탈출하는 것 입니다. (자세한 내용은 Rob의 참조 를 참조하십시오.)
-
먼저을 사용하여 전체 출력을 덤프하십시오
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
.
-
답변
이것은 한 줄짜리 명령이며, 그것이 당신에게도 효과가 있기를 바랍니다.
@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.