regex strawberry perl (windows) 单行修复多个换行 (0a) 字符

regex strawberry perl (windows) one-liner to fix multiple linefeed (0a) characters

在 Windows 中,MS SQL 服务器向我发送了一份报告,其中包含嵌入的重复换行符,在 Windows 中读取 mySQL 中的 LOAD DATA INFILE 时会导致错误=] 环境。我在 Powershell 脚本中使用三个 Strawberry Perl 单行代码解决了这个问题。

Strawberry Perl 可以识别 Windows '\r\n' 约定,这就是它的输出格式。但是,我无法让 Perl 识别带有单个 0x0a 换行符的空行,因为 Perl 的草莓风味总是会将其解释为新行并将其包含在输出中。

我的解决方案是简单地将所有换行符 0x0a 字符替换为不太可能出现在内容中的字符串:

<*  script is Powershell, initialize source file name*>
$myLoginCSV = 'User%5FProfile%5FReport.csv' 

<*  convert linefeed (0a) chars into string LINEFEEDCHAR *>
$perlarg='-i.p.bak -p -e "s/\x0A/LINEFEEDCHAR/g"'
perl $perlarg $myLoginCSV

<*  de-duplicate linefeeds*>   
$perlarg='-i.p.bak -p -e "s/(LINEFEEDCHAR){2,}/LINEFEEDCHAR/g"'
perl $perlarg $myLoginCSV

<*  restore the 0a linefeed characters by substituting for LINEFEEDCHAR *> 
$perlarg='-i.p.bak -p -e "s/LINEFEEDCHAR/\x0a/g"'
perl $perlarg $myLoginCSV

我试图在一行中做到这一点,但不知道如何做。 Strawberry Perl 以固定行为解释换行符以使其与 Windows 兼容。 "three liner" 效果很好而且速度很快。尝试使用 Powershell 原生正则表达式进行此操作的速度要慢 10 倍以上。

特别是在 Strawberry Perl Windows 环境中,有没有办法在不到三行的情况下做到这一点?

这不是高优先级。我从中吸取的一个教训是,在 Windows 中使用 Strawberry Perl 的正则表达式解决方案可以有一个多行解决方案,但仍然很快。将来,我不会执着于真正的 "one-line" 解决方案,当几行额外的代码完成工作时。

Slurp and replace consecutive newlines同单.

perl -0777 -i.p.bak -lpe "s/\R+/\n/g" User%5FProfile%5FReport.csv