соответствие шаблону grep

Следующий оператор всегда возвращает 1, когда я ожидаю, что он вернет 0:

echo "ACI123456777-001-20170701.pdf" | grep -e "^ACI([0-9]{9})-([0-9]{3})-([0-9]{8}).pdf$" 

  • Почему «sudo su» в сценарии оболочки не запускает остальную часть скрипта как root?
  • текст для создания файла xls
  • Команда find и rm не подчиняется исключающему списку
  • Петля для snmpwalk в bash
  • Как решить sudo: невозможно выполнить / bin / ls: слишком много аргументов
  • Прочитайте строку из файла, манипулируйте, а затем добавьте в другой файл
  • Как найти частоту появления строк, содержащихся в файле?
  • Выполнение ненастроенного сценария в терминале ubuntu
  • 2 Solutions collect form web for “соответствие шаблону grep”

    Вы наблюдали выход кода 1, например:

     $ echo "ACI123456777-001-20170701.pdf" | grep -e "^ACI([0-9]{9})-([0-9]{3})-([0-9]{8}).pdf$"; echo code=$? code=1 

    Чтобы он работал так, как вы ожидаете, вам нужна опция -E`:

     $ echo "ACI123456777-001-20170701.pdf" | grep -Ee "^ACI([0-9]{9})-([0-9]{3})-([0-9]{8}).pdf$"; echo code=$? ACI123456777-001-20170701.pdf code=0 

    -E включает расширенные функции регулярных выражений.

    Если вы действительно хотите использовать основное регулярное выражение, которое по умолчанию, вам нужно добавить несколько экранов:

     $ echo "ACI123456777-001-20170701.pdf" | grep -e "^ACI\([0-9]\{9\}\)-\([0-9]\{3\}\)-\([0-9]\{8\}\).pdf$"; echo code=$? ACI123456777-001-20170701.pdf code=0 

    Значение -e

    Параметр -e grep предшествует шаблону регулярного выражения:

     $ echo "ACI123456777-001-20170701.pdf" | grep -e '^ACI' ACI123456777-001-20170701.pdf 

    Если есть только один шаблон, то grep не нужен -e и вы можете его опустить:

     $ echo "ACI123456777-001-20170701.pdf" | grep '^ACI' ACI123456777-001-20170701.pdf 

    Однако, если есть два или более шаблонов, необходимо -e :

     $ echo "ACI123456777-001-20170701.pdf" | grep -e '^ACI' -e 'pdf' ACI123456777-001-20170701.pdf 
     echo "ACI123456777-001-20170701.pdf" | grep -q "ACI[0-9]\{9\}-[0-9]\{3\}-[0-9]\{8\}.pdf" echo $? 
    Linux и Unix - лучшая ОС в мире.