2010-11-23 2 views
2

기본적으로 설정 내용 Set-Content C:\test.txt "test","test1"을 사용하면 제공된 두 문자열은 줄 바꿈으로 구분되지만 파일 끝에는 줄 바꿈도 있습니다.powershell get-content newline을 무시합니다

Get-Content를 사용할 때 공백이있는이 개행이나 줄 바꿈을 어떻게 무시합니까?

답변

1

이 같은 빈 줄을 제거 할 수 있습니다

Set-Content C:\test.txt "test",'',"test1" 
Get-Content c:\test.txt | ? { $_ } 

그러나, 그것은뿐만 아니라 중간에 문자열을 제거합니다.
편집 : 실제로 예제를 시도한 결과, Get-ContentSet-Content에 의해 마지막으로 추가 된 빈 줄을 무시한다는 사실을 발견했습니다.

문제가 Set-Content에 있다고 생각합니다. 당신이 WriteAllText과 해결 방법을 사용하는 경우, 그것을 잘 작동합니다

[io.file]::WriteAllText('c:\test.txt', ("test",'',"test1" -join "`n")) 

당신은 두 번째 매개 변수로 문자열을 전달합니다. 그래서 내가 처음에 -join을 통해 문자열에 가입 한 다음 메서드에 전달했습니다.

참고 : 문자열 연결이 효율적이지 않기 때문에 대용량 파일에는 권장하지 않습니다.

+0

에서 ['WriteAllLines' (http://msdn.microsoft.com/en-us/library/system.io.file.writealllines.aspx)에있어서 작동 'IO.File] :: WriteAllLines ('c : \ test.txt', ("test", " ',"Test1 ")) 배열을 하나의 문자열로'- join'할 필요가 없다. ' –

0

문자열의 배열로 내용을 설정하고 한 줄에 하나씩 가져올 수 있기 때문에 Set-Content가 새 줄을 추가하는 것이 기본 동작입니다. 어쨌든 Get-Content는 마지막 "새 줄"을 무시합니다 (뒤에 공백이없는 경우). 설정 내용에 대한 주위 일 :

([byte[]][char[]] "test"), ([byte]13), ([byte]10) ,([byte[]][char[]] "test1") | 
    Set-Content c:\test.txt -Encoding Byte 

또는 [io.file] :: WriteAllText가

당신이 정확한 상황 (또는 코드)를 지정할 수 있습니다

훨씬 더 간단 사용할 수 있습니까?

예를 들어

당신이의 모습 콘텐츠를 가져올 때 마지막 행을 무시하려는 경우 :

$content = Get-Content c:\test.txt 
$length = ($content | measure).Count 
$content = $content | Select-Object -first ($length - 1) 

을하지만 당신은 그냥 할 경우 :

"test","test1" | Set-Content C:\test.txt 
$content = Get-Content C:\test.txt 

$ 내용 변수가이 개 항목을 포함합니다 : "테스트 ","TEST1 "

0
Get-Content C:\test.txt | Where-Object {$_ -match '\S'} 
관련 문제