2

次のような内容を含むテキスト ファイルがあります。

blah, blah, blah ...

Text : {string1, string2, string3,
        string4, string5, string6,}

blah, blah, blah ...

Text : {string7, string8, string9,
        string10, string11, string12,}

そして、中括弧の間の行のみを1行にマージして、次のようにしたいと思います:

blah, blah, blah ...

Text : {string1, string2, string3, string4, string5, string6,}

blah, blah, blah ...

Text : {string7, string8, string9, string10, string11, string12,}

ただし、他のものが含まれているため、テキスト ファイル全体に変更を適用したくありません。中括弧 { ... } の間のテキストのみを編集したいと思います。いじりまし-joinたが、動作させることができませんでした。ファイルを開き、変更を加え、別のファイルに出力する次のスクリプトがあります。

gc input.txt | 

# Here I have several editing commands, like find/replace.
# It would be great if I could add the new change here.

sc output.txt

ありがとうございました!

4

2 に答える 2

4

これを試して:

$text = (Get-Content .\input.txt) -join "`r`n"
($text | Select-String '(?s)(?<=Text : \{)(.+?)(?=\})' -AllMatches).Matches | % {
        $text = $text.Replace($_.Value, ($_.Value -split "`r`n" | % { $_.Trim() }) -join " ")
}
$text | Set-Content output.txt

各行の最初と最後にある余分なスペースを取り除き、すべての行をスペースで接続します。

于 2013-02-14T21:58:47.970 に答える
1

ジャンボ海老の缶詰:

$testdata = @'
blah, blah, blah ...

Text : {string1, string2, string3,
        string4, string5, string6,}

blah, blah, blah ...

Text : {string7, string8, string9,
        string10, string11, string12,}
'@

$testfile = 'c:\testfiles\testfile.txt'
$testdata | sc $testfile
$text = [IO.File]::ReadAllText($testfile)

$regex = @'
(?ms)(Text\s*:\s\{[^}]+)\s*
\s*([^}]+)\s*
'@

$text -replace $regex,'$1 $2'

何とか何とか何とか ...

テキスト: {string1, string2, string3, string4, string5, string6,}

何とか何とか何とか ...

テキスト: {string7, string8, string9, string10, string11, string12,}

于 2013-02-15T07:39:31.223 に答える