Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将文本文件(Powershell)中的多行合并/合并为一行_Powershell - Fatal编程技术网

将文本文件(Powershell)中的多行合并/合并为一行

将文本文件(Powershell)中的多行合并/合并为一行,powershell,Powershell,我有一个包含如下内容的文本文件: blah, blah, blah ... Text : {string1, string2, string3, string4, string5, string6,} blah, blah, blah ... Text : {string7, string8, string9, string10, string11, string12,} 我只想将大括号之间的线合并成一行,如下所示: blah, blah, blah ..

我有一个包含如下内容的文本文件:

blah, blah, blah ...

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

blah, blah, blah ...

Text : {string7, string8, string9,
        string10, string11, string12,}
我只想将大括号之间的线合并成一行,如下所示:

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
谢谢大家!

试试这个:

$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
$text=(获取内容。\input.txt)-加入“`r`n”
($text |选择字符串’(?Jumbo shrimp in a can:

$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,}

这适用于整个文本文件。如果可能的话,我只想将其应用于我说过的大括号之间的文本。请参阅更新的答案。这与您现在回答的其他问题几乎相同。这是一种不同的方法,因此我认为值得问一个新问题。您的解决方案适用于第一组
'Text:{'
。但是它也会改变(修剪和连接)之后的所有内容。因此,它不仅限于整个文件中大括号之间的文本。我编辑了这个问题,以便更好地表示文件中的内容。我非常感谢您的帮助Graimer。很好的解决方案,但这只支持两行。它应该是动态的。除非我误读了这个问题,否则这就是目标。它将tch并在文本中的任何位置替换这两行。我将更新答案,使其更具说明性。他的文件实际上是这样的:有3行。它是日志文件或其他文件,所以我猜“文本”部分可以是1行,10行,不时更改。它将匹配此处字符串中的任何内容(即“can”)和jumbo-shrimp选项(?ms)意味着您可以将其写入多行。A.+将通过多行进行匹配。将正则表达式段放在here字符串中的单独行上会隐式地向正则表达式的该部分添加^和$anchors。