我需要处理一个文件,其中包含一些以破折号 (-) 开头的行;这些是需要附加到上一行的续行。所以我所拥有的是:
Lorem ipsum dolor sit amet, consectetur
- adipiscing elit. Donec
- consectetur lotis.
Sed a est dui.
Curabitur placerat a tortor
- vel sodales.
我想要的是:
Lorem ipsum dolor sit amet, consectetur - adipiscing elit. Donec - consectetur lotis.
Sed a est dui.
Curabitur placerat a tortor - vel sodales.
所以我写了这样的东西:
$s = ""
cat $f |%{
if ($_ -match "^-") { $s += $_ } else { $s; $s = $_; }
} |out-file x.txt
我的问题是:如果文件以虚线结尾,脚本永远不会输出最后一行,因为从管道收到最后一行后,它不知道这是最后一行。
在 Perl 中,我曾经能够使用像 END {} 这样的结构来做这些事情。这将如何在 Powershell 中处理?
更新
Perl 是相关的,因为在那种语言中我可以做类似的事情(txt
包含相关文本的文件在哪里):
perl -lne '
BEGIN { $s = "" };
if (/^-/) { $s .= $_ } else { print $s; $s = $_; }
END { print $s; }
' txt
如您所见,END{} 构造解决了我的问题