Почему это регулярное выражение не работает?

Я хочу посмотреть на вывод git status -s чтобы определить, есть ли в дереве какие-либо необработанные файлы. Я пробовал следующий тест, но регулярное выражение не совпадает. Почему нет?

 $ git status -s ## master M updated-file ?? new-file $ [[ $(git status -s) =~ ^\?\? ]] || echo "no match" no match 

Я также хотел бы иметь возможность протестировать добавленные / измененные / удаленные файлы таким же образом. Обычно для этого я использую что-то вроде ^\s*[AMD] , но это тоже не работает. Что дает?

One Solution collect form web for “Почему это регулярное выражение не работает?”

Вы сопоставляетесь со всей строкой, а не с каждой строкой строки, поэтому вы действительно проверяете против ## в этом регулярном выражении.

grep – лучший выбор для этого:

 if ! git status -s | grep -q '^??'; then echo "no match" fi 

По запросу вы можете сделать то же самое для добавления / изменения / удаления:

 git status -s | grep '^ *[AMD]' 

Вы также можете посмотреть в git status --porcelain (вариант, который впервые появился в версии 1.7.0), который больше ориентирован на разбор.

  • Поиск отлично работает в командной строке, но не работает в скрипте
  • где скрывается тема AlaDelta и как ее удалить / очистить / удалить
  • Удаление обратных косых черт из текстового файла
  • Выполните поиск регулярных выражений по ранее определенной линии с регулярным выражением (однострочный)
  • Как выбрать первое совпадение между двумя шаблонами, включая их
  • Regex этот формат вопроса в LaTeX
  • подстроки и регулярные выражения
  • Как искать одиночные кавычки и двойные кавычки в поиске grep?
  • sed: игнорировать строку, начинающуюся с пробела для соответствия
  • Поиск дубликатов экземпляров тега в файле
  • Обнаружение повторения шаблонов в файле
  • Почему мой файловый фильтр offlineimap не работает?
  • Linux и Unix - лучшая ОС в мире.