리눅스의에 해당하는 명령이 무엇인지 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 21GB 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.exeWindows에 존재하며 포트를 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를 제외한 모든 것을 무시합니다.