文件(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
。
非常感谢任何帮助!
答案 0 :(得分:2)
perl -p
逐行读取输入。您需要立即读取整个输入,或者记住前一行是否以空格结束。
perl -0777 -pe 's/\s+/S/g'
-0777
一次读取整个文件。
perl -pe 's/^\s+// unless 1 == $.; s/\s+/S/g;'
此处,删除任何前导空格(第一行除外)。无论如何,我们知道它必须在换行符之前。