2016-09-21 11 views
0

unixでは正規表現の下で何が問題になっていますか?以下の正規表現で何が問題なのです

echo AB345678 | sed -n '/^\([a-zA-Z]\{2\}[0-9]\{6\}|[0-9]\{8\}\)$/p' 
echo 12345678 | sed -n '/^\([a-zA-Z]\{2\}[0-9]\{6\}|[0-9]\{8\}\)$/p' 

私は出力を取得していない午前:(

私はそれが私の正規表現と一致していない理由を私はエコーされた文字列を意味する? いただきました私の正規表現が間違って?

+0

あなたはどのような出力をしたいですか? – Thomas

+2

何も問題ありません。それはまさにあなたが書いたものです。おそらく、おそらく幸せです。 – arkascha

答えて

2

で交代演算子BREの正規表現構文が(()に類似)エスケープパイプ\|として定義しなければならない。

echo "AB345678" | sed -n '/^\([a-zA-Z]\{2\}[0-9]\{6\}\|[0-9]\{8\}\)$/p' 
                 ^^ 

online demoを参照してください。

+0

私は以下の両方を試みましたが、まだ出力はありません。 エコーAB345678 | sed -n '/^\([a-zA-Z] \ {2 \} [0-9] \ {6 \} \ | [0-9] \ {8 \} \)$/p' "AB345678" | sed -n '/^\([a-zA-Z] \ {2 \} [0-9] \ {6 \} \ | [0-9] \ {8 \} \)$/p' –

+0

I私が 'sed'を実行すると、 "/ usr/xpg4/bin/sed"を参照してください.. –

+0

あなたはSun OS上にいるということですか? [このスレッド](http://unix.stackexchange.com/a/151020)を参照してください。 –

0

さらに複雑な式では、機密文字をエスケープする代わりに、'-r'をsedオプションに追加することができます。

sedのマニュアルから:

-r、--regexp拡張
使用することは、スクリプト内で正規表現を拡張しました。

回答:

echo AB345678 | sed -nr '/^([a-zA-Z]{2}[0-9]{6}|[0-9]{8})$/p' 
        ^
echo 12345678 | sed -nr '/^([a-zA-Z]{2}[0-9]{6}|[0-9]{8})$/p' 
        ^
+0

@LalitSomnatheなぜあなたは私の答えを見ないのですか?私はよりエレガントだと思います。 この問題には#sedというタグも付ける必要があります。この問題はregexやunixシステムには当てはまりませんが、sedの構文には当てはまりません。 – hbadger