【问题标题】:Replace possible blank space at the beginning of the line替换行首可能的空格
【发布时间】:2019-04-07 15:49:11
【问题描述】:

所以我尝试像这样替换行首的空格。

原文:

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

所以我没有正确处理没有文本的行。或者更确切地说,我不明白它为什么会这样。

知道为什么吗?

谢谢!

【问题讨论】:

标签: regex perl search replace


【解决方案1】:

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

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

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

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

如果您还可以保留 VT、FF、CR、LINE SEPARATOR 和 PARAGRAPH SEPARATOR,则可以将上述内容缩短为以下内容:

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

【讨论】:

    【解决方案2】:

    正如评论中的sticky bit 所指出的,我只需要将\s 替换为\h。 解决了!

    【讨论】:

    • 另外,你不需要捕获该行的其余部分:s/^\h?/+/ 就足够了
    猜你喜欢
    • 2020-02-05
    • 1970-01-01
    • 2018-03-15
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多