리눅스의에 해당하는 명령이 무엇인지 PowerShell을 사용하여 Windows,에 head
, tail
, more
, less
와 sed
?
notepad
기반 으로 사용 하는 경우 대체 텍스트 편집기를 사용 하는 것이 좋습니다. 많은 (무료 및 유료) 대안이 있습니다. 모두 메모장보다 우수합니다 (그다지 어렵지는 않지만).
리눅스의에 해당하는 명령이 무엇인지 PowerShell을 사용하여 Windows,에 head
, tail
, more
, less
와 sed
?
notepad
기반 으로 사용 하는 경우 대체 텍스트 편집기를 사용 하는 것이 좋습니다. 많은 (무료 및 유료) 대안이 있습니다. 모두 메모장보다 우수합니다 (그다지 어렵지는 않지만).
답변:
Get-Content
(별칭 gc
:)은 텍스트 파일을 읽기위한 일반적인 옵션입니다. 그런 다음 추가로 필터링 할 수 있습니다.
gc log.txt | select -first 10 # head
gc -TotalCount 10 log.txt # also head
gc log.txt | select -last 10 # tail
gc -Tail 10 log.txt # also tail (since PSv3), also much faster than above option
gc log.txt | more # or less if you have it installed
gc log.txt | %{ $_ -replace '\d+', '($0)' } # sed
이것은 작은 파일에 대해 충분히 작동하며 큰 파일 (수 MiB 이상)은 아마도 약간 느립니다.
PowerShell을 커뮤니티 확장 전문 파일 물건 (예 : GET-FileTail)에 대한 몇 가지 cmdlet을 포함한다.
-last 2
1GB CSV 에서 수행하기 위해 CPU를 최대로 사용하고 있습니다. 뜨거운 음료 : ☕
Get-Content -Tail 2
하는 경우 대신 사용할 수 있습니다 . 확실히 더 빠릅니다.
gc log.txt | %{ $_ -replace '\d+', '($0)' } # sed
콘텐츠를 되 돌리지 않기 때문에 실제로 sed 도구가 아닙니다. Set-Content가 필요합니다.
-Last
같은 이유로 awk
느립니다. 같은 작업에 대해 느릴 것입니다. 먼저 스트림을 완전히 소비해야합니다. 그것이 Get-Content -Tail
존재하는 이유 입니다. 그리고 거기에는 없다 head
가 명명 규칙에 적합하지 않기 때문에, 그 목적은 이미에 의해 제공됩니다 Select-Item
.
-head
. 내 대답 stackoverflow.com/a/41626586/1081043
다음은 기본 제공 방법 head
및 tail
. 큰 파일이 있으면 매우 느리므로 파이프를 사용하지 마십시오. 이러한 기본 제공 옵션을 사용하면 대용량 파일에서도 매우 빠릅니다.
gc log.txt -head 10
gc log.txt -tail 10
gc log.txt -tail 10 -wait # equivalent to tail -f
| select -last
파이프를 사용합니다. -tail
파이프없이 사용하고 있습니다. 그러나 두 가지 상충되는 답을 찾은 경우 훨씬 더 높은 평판을 가진 사람을 신뢰할 수 있습니다. 또한 대용량 파일에 대해 두 가지 방법을 시도해 볼 수도 있습니다. 큰 파일에서는 매우 분명합니다.
more.exe
Windows에 존재하며 포트를 less
쉽게 찾을 수 있습니다 ( PowerShell Community Extensions , PSCX에는 하나가 포함되어 있음).
PowerShell은 실제로 별도의 프로그램에 대한 대안을 제공하지 않지만 구조화 된 데이터의 Out-Grid
경우 도움이 될 수 있습니다.
Head
및 Tail
모두를 에뮬레이트 할 수있다 Select-Object
은 USING -First
및 -Last
각각 파라미터.
Sed
기능은 모두 사용할 수 있지만 구조가 다소 다릅니다. 필터링 옵션은 Where-Object
(또는 via Foreach-Object
및 범위에 대한 일부 상태) 에서 사용할 수 있습니다 . 기타, 변형, 작업은 및를 사용 Select-Object
하여 수행 할 수 있습니다 Foreach-Object
.
그러나 PowerShell이 (.NET) 개체를 전달함에 따라 모든 유형이 지정된 구조 (예 : 날짜는 DateTime
인스턴스로 남아 있습니다. 각 명령이 자체적으로 구문 분석해야하는 문자열이 아니라 많은 sed
프로그램과 다른 프로그램이 중복됩니다.
이 인스턴스에서 "-TotalCount"는 "-head"와 똑같이 응답합니다. 그런 명령을 실행하려면 -TotalCount 또는 -head를 사용해야합니다. 그러나 -TotalCount는 오해의 소지가 있습니다. 실제로는 어떤 카운트도 제공하지 않습니다.
gc -TotalCount 25 C:\scripts\logs\robocopy_report.txt
PS 5.1에서 테스트 한 위의 스크립트는 아래와 같은 응답입니다.
gc -head 25 C:\scripts\logs\robocopy_report.txt
그러니 이미 '-head 25'를 사용하세요!
Windows에서 큰 (또는 작은) 로그 파일을 쿼리해야하는 경우 내가 찾은 최고의 도구는 Microsoft의 무료 Log Parser 2.2 입니다. 원하는 경우 PowerShell에서 호출 할 수 있으며 모든 무거운 작업을 매우 빠르게 수행 할 수 있습니다.
$Push_Pop = $ErrorActionPreference #Suppresses errors
$ErrorActionPreference = “SilentlyContinue” #Suppresses errors
#Script
#gc .\output\*.csv -ReadCount 5 | %{$_;throw "pipeline end!"} # head
#gc .\output\*.csv | %{$num=0;}{$num++;"$num $_"} # cat -n
gc .\output\*.csv | %{$num=0;}{$num++; if($num -gt 2 -and $num -lt 7){"$num $_"}} # sed
#End Script
$ErrorActionPreference = $Push_Pop #Suppresses errors
푸시 팝 코드 BTW에 모든 오류가 발생하는 것은 아닙니다. 코드는 "sed"옵션에서만 작동합니다. 나머지는 gc와 path를 제외한 모든 것을 무시합니다.