Avi*_*Raj 1 perl regular-expression
我想通过 perl one-liner 命令删除特定行中的换行符。
输入:
1407233497,1407233514,bar
1407233498,1407233515,foo
mingstats&fmt=n
1407233499,1407233516,foobar
Run Code Online (Sandbox Code Playgroud)
预期输出:
1407233497,1407233514,bar
1407233498,1407233515,foomingstats&fmt=n
1407233499,1407233516,foobar
Run Code Online (Sandbox Code Playgroud)
到目前为止我尝试了什么?
此正则表达式\n(?!\d+,\d+)
与我要删除的换行符完全匹配。但我不知道如何通过 perl one-liner 命令实现它。我试过,
perl -pe 's/\n(?!\d+,\d+)//g' file
Run Code Online (Sandbox Code Playgroud)
但它删除了该文件中的所有换行符,最后在一行中打印以下内容,
1407233497,1407233514,bar1407233498,1407233515,foomingstats&fmt=n1407233499,1407233516,foobar
Run Code Online (Sandbox Code Playgroud)
如果 perl one-liner 命令使用上面的正则表达式,我会很高兴...
尝试:
$ perl -00pe 's/\n(?!\d+,\d+)//g' file
1407233497,1407233514,bar
1407233498,1407233515,foomingstats&fmt=n
1407233499,1407233516,foobar
Run Code Online (Sandbox Code Playgroud)
perl
默认情况下使用-p
选项逐行读取文件,因此您的正则表达式无法工作。
-00
选项打开段落 slurp 模式,您的正则表达式现在可以在多行上工作。
从 perldoc perlrun:
-0[八进制/十六进制]
将输入记录分隔符 ($/ ) 指定为八进制或十六进制数。如果没有数字,则空字符是分隔符。其他开关可以在数字之前或之后。例如,如果您有一个可以打印以空字符结尾的文件名的 find 版本。
...
特殊值 00 将导致 Perl 在段落模式下吞咽文件。任何 0400 或更高的值都会导致 Perl 吞食整个文件,但按照惯例,值 0777 是通常用于此目的的值