Perl正则表达式:替换一系列空格和换行符

时间:2016-03-31 15:03:08

标签: regex perl whitespace removing-whitespace

文件(2016, 3, 31)的空白只包含空格和换行符:

bar

我想用$ cat bar 1, 2, 3, 4 替换连续的空格(空格和换行符),即所需的输出是:

S

但是,我的所有尝试都会导致1,S2,S3,S4S 被一个\n替换,紧跟其后的空格会被另一个S替换:

S

这些是我能想到的相关正则表达式标志的所有组合:$ cat bar | perl -pe 's/\s+/S/g' 1,S2,SS3,S4S $ cat bar | perl -pe 's/\s+/S/gm' 1,S2,SS3,S4S $ cat bar | perl -pe 's/\s+/S/gms' 1,S2,SS3,S4S $ cat bar | perl -pe 's/[ \n]+/S/gms' 1,S2,SS3,S4S $ cat bar | perl -pe 's/[ \n]+/S/gm' 1,S2,SS3,S4S $ cat bar | perl -pe 's/[ \n]+/S/g' 1,S2,SS3,S4S (全局替换),/g(让/s匹配换行符)和.(多行);我总是在/m之前SS,我只想3

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

perl -p逐行读取输入。您需要立即读取整个输入,或者记住前一行是否以空格结束。

perl -0777 -pe 's/\s+/S/g'

-0777一次读取整个文件。

perl -pe 's/^\s+// unless 1 == $.; s/\s+/S/g;'

此处,删除任何前导空格(第一行除外)。无论如何,我们知道它必须在换行符之前。