Заменить возможное пустое место в начале строки - PullRequest
1 голос
/ 07 апреля 2019

Поэтому я пытаюсь заменить пробел в начале строки следующим образом.

Оригинал:

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 ]

3 голосов
/ 08 апреля 2019

Вы заменяете конец строки переводом строки.Одно из решений состоит в том, чтобы удалить его перед матчем и заново добавить его после.Это можно сделать с помощью -l.

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

В качестве альтернативы, вы можете удалить перевод строки из набора символов, который вам подходит.

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

Если вы в порядке стакже оставив VT, FF, CR, LINE SEPARATOR и PARAGRAPH SEPARATOR на месте, вы можете сократить вышеуказанное до следующего:

perl -pe's/^\h?/+/'
2 голосов
/ 07 апреля 2019

Как указано в комментарии, я просто должен заменить \ s на \ h. Это решено!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...