次のステートメントが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
パターンが1つしかない場合は、grepは必要なく、-e
省略できます。
$ echo "ACI123456777-001-20170701.pdf" | grep '^ACI'
ACI123456777-001-20170701.pdf
ただし、-e
2つ以上のスキーマが必要な場合:
$ 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 $?