2014-08-29 1 views
1

한 시스템에서 정보를 가져 와서 다른 시스템에서 끌어 오기위한 스크립트를 작성했습니다. 그래도 전에 데이터 정리를해야합니다. 나는 시스템에서 사용자 아이디를 가져오고 dom \ userid로 나옵니다. 내 다른 시스템을 위해 그것을 사용하려면 나는 dom과 함께 그냥 userid가 있어야합니다. 나는 dom을 제거하기 위해 아래의 코드를 사용했다 :PowerShell CSV로 텍스트 바꾸기

$csv = Import-Csv C:\Support\Broker.csv 
$csv | %{ If ($_.LastConnectionUser -like "*DOM*") { $_.LastConnectionUser -replace 'DOM', '' } } 
$csv | Export-Csv C:\Support\Broker.csv -NoTypeInformation -Force 

이렇게하면 \ userid가된다. 마자 내가 대체 문자열에 \를 추가, 시스템 괴물 그것은 그래서 대신 내가이

$csv = Import-Csv C:\Support\Broker.csv 
    $csv | %{ If ($_.LastConnectionUser -like "*DOM*") { $_.LastConnectionUser -replace 'DOM`\', '' } } 
    $csv | Export-Csv C:\Support\Broker.csv -NoTypeInformation -Force 

내가 같은 오류가 다음 시도 \ 해석을 시도하고 할 수 없기 때문에

ERROR: Regular expression pattern is not valid: DOM_WFLD \. broker.ps1 (24): ERROR: At Line: 24 char: 54 ERROR: + $csv | %{ If ($_.LastConnectionUser -like "*DOM*") { $_.LastConnectionUser -repl ... ERROR: + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ERROR: + CategoryInfo : InvalidOperation: (DOM_WFLD :String) [], RuntimeException ERROR: + FullyQualifiedErrorId : InvalidRegularExpression

작동하지 않는 것 같습니다. 누구든지 아이디어가 있습니까?

답변

0
$csv = Import-Csv C:\Support\Broker.csv 
    $csv | %{ If ($_.LastConnectionUser -like "*DOM*") { $_.LastConnectionUser -replace 'DOM\\', '' } } 
    $csv | Export-Csv C:\Support\Broker.csv -NoTypeInformation -Force 

사용해야하는 탈출이다 정규 표현식 일 (그래서 백 슬래시)가 아닌 PowerShell을 하나 (다시 틱) $csv | %{ If ($_.LastConnectionUser -like "*DOM*") { $_.LastConnectionUser -replace 'DOM이 포함 된 행에

1

\ ',' '}} `

더 간단하고 더 versitale 수 있습니다. 이런 일에 대한 문이 정말 크게 처리 시간을 증가 나던을 복용하는 작업부터 필요하지 않은 경우

$csv | %{ $_.LastConnectionUser -replace '\w+\\'}

. 또한 사용자 이름이 DOM 인 경우 귀하의 IF는 귀하의 의도가 아닌 것으로 상상합니다.

\ 그 자체를 포함하여 \의 모든 문자를 대체 할 수 있습니다. David가 설명 할 때 \은 정규 표현식의 특수한 도구이기 때문에 탈출해야합니다. -replace 두 번째 매개 변수가 없으면 자동으로 일치 항목 만 제거됩니다.