在行首替换可能的空格

时间:2019-04-07 15:49:11

标签: regex perl search replace

所以我尝试像这样在行的开头替换空白。

原始:

this
 is

\tsome
  text

我想要什么:

+this
+is
+
+some
+ text

我试图使用此正则表达式来做到这一点:

echo -e 'this\n is\n\n\tsome\n  text' |
perl -wpe 's/^\s?(.*)/+$1/'

但这是结果:

+this
+is
++some
+ text

因此,我根本没有任何文字的行未得到正确处理。或者更确切地说,我不明白为什么会这样。

知道为什么吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

您要替换换行符。一种解决方案是在比赛前将其删除,然后再添加。可以使用-l完成。

perl -ple's/^\s?/+/'

或者,您可以从匹配的字符集中删除换行符。

perl -pe's/^[^\S\n]?/+/'

如果还可以保留VT,FF,CR,LINE SEPARATOR和PARAGRAPH SEPARATOR,可以将以上内容简化为以下内容:

perl -pe's/^\h?/+/'

答案 1 :(得分:2)

正如评论中的粘滞指出的那样,我只需要用\ h替换\ s。 解决了!