다음 명령문이 0을 반환할 것으로 예상하면 항상 1을 반환합니다.
echo "ACI123456777-001-20170701.pdf" | grep -e "^ACI([0-9]{9})-([0-9]{3})-([0-9]{8}).pdf$"
답변1
다음과 같이 코드 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
grep 옵션은 -e
정규식 패턴 앞에 옵니다.
$ 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
답변2
echo "ACI123456777-001-20170701.pdf" | grep -q "ACI[0-9]\{9\}-[0-9]\{3\}-[0-9]\{8\}.pdf"
echo $?