Perl 正则表达式:替换 运行 个空格和换行符
Perl regexs: replace a run of spaces and newlines
文件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
(多行);我总是在 3
之前加上 SS
,我只需要 S
.
如有任何帮助,我们将不胜感激!
perl -p
逐行读取输入。您需要一次读取整个输入,或者记住上一行是否以空格结尾。
perl -0777 -pe 's/\s+/S/g'
-0777
一次读取整个文件。
perl -pe 's/^\s+// unless 1 == $.; s/\s+/S/g;'
这里,所有前导空格都被删除(第一行除外)。无论如何,我们知道它前面必须有一个换行符。
文件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
(多行);我总是在 3
之前加上 SS
,我只需要 S
.
如有任何帮助,我们将不胜感激!
perl -p
逐行读取输入。您需要一次读取整个输入,或者记住上一行是否以空格结尾。
perl -0777 -pe 's/\s+/S/g'
-0777
一次读取整个文件。
perl -pe 's/^\s+// unless 1 == $.; s/\s+/S/g;'
这里,所有前导空格都被删除(第一行除外)。无论如何,我们知道它前面必须有一个换行符。