2012-10-24 100 views
0

我是PowerShell的新手,希望在文本文件中的某些場景中替換CRLF。PowerShell在某些場景中替換CRLF

爲例文本文件將是:

Begin 1 2 3 
End 1 2 3 
List asd asd 
Begin 1 2 3 
End 1 2 3 
Begin 1 2 3 
End 1 2 3 
Sometest asd asd 
Begin 1 2 3 

凡線不與開始或結束開始,我想該行追加到前一個。

所以期望的結果將是:

Begin 1 2 3 
End 1 2 3 List asd asd 
Begin 1 2 3 
End 1 2 3 
Begin 1 2 3 
End 1 2 3 Sometest asd asd 
Begin 1 2 3 

該文件選項卡分隔。所以在開始和結束之後,是一個TAB。

我試過下面,只是爲了擺脫所有的CRLF的,這不工作:

$content = Get-Content c:\test.txt 
$content -replace "'r'n","" | Set-Content c:\test2.txt 

我讀過PowerShell中的MSDN,可以在不同線路上替換文本,只是沒有結束多行這樣的:(

我在對Windows 7的家庭測試,但這是工作,並會在Vista上。

+0

我現在意識到,那獲取內容讀取文件中,在串線和刪除CRLF? - 我可以這樣使用:[System.IO.File] :: ReadAllText(「c:\ test.txt」) - 替換「'r'n [^ B |^E]」,「」| Set-Content c:\ test2.txt 但是這個刪除了L和S,在List和Sometest上 – TomEaton

+0

請注意'$ content'是一個數組。你可以通過嘗試'$ content.GetType()' – David

回答

1

您如何看待這一行呢?

gc "beginend.txt" | % {}{if(($_ -match "^End")-or($_ -match "^Begin")){write-host "`n$_ " -nonewline}else{write-host $_ -nonewline}}{"`n"} 

Begin 1 2 3 
End 1 2 3 List asd asd 
Begin 1 2 3 
End 1 2 3 
Begin 1 2 3 
End 1 2 3 Sometest asd asd 
Begin 1 2 3 
+0

來說服你自己,謝謝,這個按預期工作:) – TomEaton

0
$data = gc "beginend.txt" 

$start = "" 
foreach($line in $data) { 
    if($line -match "^(Begin|End)") { 
     if($start -ne "") { 
      write-output $start 
     } 
     $start = $line 
    } else { 
     $start = $start + " " + $line 
    } 
} 

# This last part is a bit of a hack. It picks up the last line 
# if the last line begins with Begin or End. Otherwise, the loop 
# above would skip the last line. Probably a more elegant way to 
# do it :-) 
if($data[-1] -match "^(Begin|End)") { 
    write-output $data[-1] 
} 
2
# read the file 
$content = Get-Content file.txt 

# Create a new variable (array) to hold the new content 
$newContent = @() 

# loop over the file content  
for($i=0; $i -lt $content.count; $i++) 
{ 
    # if the current line doesn't begin with 'begin' or 'end' 
    # append it to the last line םכ the new content variable 
    if($content[$i] -notmatch '^(begin|end)') 
    { 
    $newContent[-1] = $content[$i-1]+' '+$content[$i] 
    } 
    else 
    { 
    $newContent += $content[$i] 
    } 
} 

$newContent 
+0

你能提供一些背景/背景對這個答案嗎? –

+1

添加評論內嵌 –

+0

謝謝,+1給你先生。 –