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

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

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

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

  • sed: игнорировать строку, начинающуюся с пробела для соответствия
  • sed regex для группы захвата между разделителями
  • Как правильно использовать find с регулярным выражением?
  • как выбрать файлы в каталоге с булевым оператором AND
  • Переименование файлов с расширением нижнего регистра с «переименованием»
  • rsync определенные файлы, исключая остальные, игнорируя каталог .svn /, рекурсивно
  • bash + регулярное выражение + подтверждение имени машины
  • vim regex для поиска строк, содержащих string1 AND string2
  • 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), который больше ориентирован на разбор.

    Interesting Posts

    Условное присвоение на основе переменной среды

    Почему меньше строк результатов поиска исчезают / появляются снова?

    Несколько сообщений «-bash command not found» в Mac OS X Snow Leopard Unix

    Debian 9, APT и «ошибка GPG: … InRelease: следующие подписи были недопустимыми:

    Как удалить последний столбец файла в Linux

    Почему это исключает шаблон для rsync, дает разные результаты, когда исходный каталог имеет завершающую косую черту?

    Как отправить всю информацию в файл / var / adm / message в удаленную систему?

    Ошибка установки pysqlite на FreeBSD в virtualenv

    Попытка сортировать два списка чисел и использовать uniq для получения пересечения

    Поиск списка модулей, которые используются во время загрузки

    Как установить dig на CentOS 6?

    pkg: не удается извлечь pkg-static, Новое в UNIX

    Какова «стоимость» глубоко вложенных папок в ext4?

    Имена для дисков ATA и SATA в Linux

    Узнайте, запущен ли компьютер через Wake-on-LAN или кнопку питания?

    Linux и Unix - лучшая ОС в мире.