我正在使用powershell读取一个文件。请参阅文件中的示例内容。
This is my file with content
-- #Start
This is more content
across different lines
etc etc
-- #End
我正在使用这段代码将文件读入一个变量。
$content = Get-Content "Myfile.txt";
然后,我使用这段代码从文件中剥离一个特定的部分,并基于开始和结束标记。
$stringBuilder = New-Object System.Text.StringBuilder;
$pattern = "-- #Start(.*?)-- #End";
$matched = [regex]::match($content, $pattern).Groups[1].Value;
$stringBuilder.AppendLine($matched.Trim());
$stringBuilder.ToString() | Out-File "Newfile.txt" -Encoding utf8;
我的问题是在我写入的文件中,格式没有被维护。所以我想要的是:
This is more content
across different lines
etc etc
但我得到的是:
This is more content across different lines etc etc
有什么想法我可以改变我的代码,以便在输出文件的结构是保持(多行)?
1条答案
按热度按时间b4lqfgs41#
这个正则表达式可以满足你的要求,在这种情况下使用
StringBuilder
没有意义。注意,因为这是一个多行正则表达式模式,你需要使用-Raw
开关来读取文件的内容。有关详细信息,请参见https://regex101.com/r/82HJxf/1。
如果你想进行“逐行”处理,你可以使用
switch
来读取和处理感兴趣的行,这在文件很大,内存放不下的时候特别有用。如果开始标记和结束标记只出现一次,您甚至可以在遇到结束标记时立即
break
开关以停止处理: