2017-01-03 1 views
-3

각 줄의 처음 두 글자를 바꿔야하는 파일이 있습니다. 그것은 쉬운 것처럼 보이지만 처음 두 문자 "| 0"은 파일의 다른 곳에 나타납니다. 그래서 나는 그 자리에 대체 문자열 "$ bp"를 갖게되었습니다. 각 줄에 대해서만 "| 0"의 첫 번째 인스턴스를 바꾸는 방법은 없습니까? 다음은 샘플 데이터입니다.PowerShell을 통해 파일의 각 줄의 첫 두 글자를 대체하십시오.

0|Corrupt Record|0|0|0|0|0|0|0|0|0 
+3

이 문제를 보여줍니다 예를 들어, 입력 및 예제 코드를 게시하여 질문을 개선하십시오 : 그들은 0|입니다 경우

는 각 라인의 2 개 첫 번째 문자를 대체하는이 조각을 사용할 수 있습니다. –

+1

'Get-Content "파일 경로"| ForEach-Object {$ _ -place "^ \ | 0", ""} | 세트 내용 "파일 경로". '^'는 문자열의 시작을 의미하고 백 슬래시는'정규 표현식에서 특수 문자 인'|'를 이스케이프합니다. – sodawillow

+1

@sodawillow'(Get-Content "filepath") | ... '같은 파일에 쓰기를 원한다면. –

답변

-1

확실한 방법이 있지만 여기에는 내 접근 방법이 있습니다.

첫 번째 "0 |" 남은 체류 시간을 그대로 유지할 수 있습니다. 0 | | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 그냥 간단한 정규식 0

가 교체

부패 기록 :이 뜻 출력이

$CorruptString = "0|Corrupt Record|0|0|0|0|0|0|0|0|0" 
[regex]$ToReplace = "0\|" 
$ToReplace.replace($CorruptString, "", 1) 

손상된 문자열을 대체하거나 아무것도 바꾸지 말고 다른 것으로 바꾸십시오. 당연히 1은 1 회만 수행합니다.

나는 그것이 당신이 찾고있는 것이라고 믿습니다. 더 설명하려고하지 않는 경우.

편집 : 게시물과 약간의 혼란이 있었기 때문에. 문자열의 처음 두 문자를 바꾸려면 먼저 부분 문자열을 제거하여 처음 두 문자를 제거하면됩니다. 귀하의 질문이 명확하지

"0|Corrupt Record|0|0|0|0|0|0|0|0|0".Substring(2) 
+0

질문을 다시 읽으십시오. OP는 ('$ bp' 변수의 값으로) 각 행에서 첫 번째 '0 |'을 대체하고 완전히 제거하지 않으려합니다. –

1

(0||0).

$oldContent = Get-Content "my/file" 

$newContent = $OldContent | ForEach-Object { $_ -replace "^0\|","newstring" } 
# simpler 
#$newContent = $OldContent -replace "^0\|","newstring" 

$newContent | Set-Content "my/file" 
+1

ForEach-Object는 여기에 필요하지 않습니다. '-replace' 연산자는 문자열과 문자열 배열 모두에서 작동합니다. –

관련 문제