Не работает "+" в синтаксисе grep regex [duplicate]

Для терминалов, которые его поддерживают, можно использовать escape-последовательности курсора сохранения и курсора восстановления :

#! /bin/sh -
save_cursor=$(tput sc) restore_cursor=$(tput rc)
text="\
XX----------------------------------------------------------XX
|XXX                                                        |XXX
|  XX                                                       |   XXX
|   XX------------------------------------------------------+-----XXX
|    |                                                              +
|    |     +----------------------------------------------------+   |
|    |     |                                                    |   |
|    |     |                                                    |   |
|    |     |                                                    |   |
|    |     |                                                    |   |
|    |     |                                                    |   |
|    |     |            $save_cursor$(date +%T)  <------+  Characters to replace!  |
|    |     |                                                    |   |
|    |     |     <--------------------------+                   |   |
|    |     |                                                    |   |
|    |     |                                                    |   |
|    |     |                                                    |   |
+XX--+     |                                                    |   |
  XX |     +----------------------------------------------------+   |
   XXX                                                              |
     +--------------------------------------------------------------+"

printf '%s\n' "$text"

while sleep 1; do
  printf %s "$restore_cursor$(date +%T)"
done
3
14.10.2016, 13:11
3 ответа

Вам нужно сообщить grep , что вы используете расширенное регулярное выражение:

grep -E '.+' file1

Стандартное Базовое регулярное выражение (используется grep без -E ) эквивалент оператора Extended Regular Expression + - \ {1, \} , хотя некоторые реализации (например, GNU) также распознают \ + для этого в качестве расширения (и вы всегда можете использовать .. * ).

(Обратите внимание, что в этом конкретном случае grep -E. + эквивалентно grep -E. , поскольку вы ищете подстроки, соответствующие регулярному выражению, когда не используете ] -x параметр. Во многих системах egrep предоставляется как эквивалентная команда для grep -E , но, как Грэм указывает , это устарел .)

6
27.01.2020, 21:10

В GNU grep (по умолчанию в Ubuntu) вы также можете включить расширенное поведение с помощью обратной косой черты. Например:

grep '.\+' file1
2
27.01.2020, 21:10

Я считаю, что + - это расширенный метасимвол регулярного выражения. Попробуйте использовать egrep .

1
27.01.2020, 21:10

Теги

Похожие вопросы