2017-04-13 5 views
0
/[SELECT]{6}[ ]{0,50}[@clnt_id_n]{10}[ \t]{0,50}[=]{1}[ \t]{0,50}[0-9]{2,10}/g 

上記の正規表現式はregexr.comregexr.comでの正規表現のマッチングが、私は使用している場合、動作するようには思えないしかしGREP(bashの)に

SELECT @clnt_id_n    = 38404 

に以下のために良い取り組んでいません以下のようにgrepを有すること:

egrep "[SELECT]{6}[ ]{0,50}[@clnt_id_n]{10}[ \t]{0,50}[=]{1}[ \t]{0,50}[0-9]{2,10}" filename 
+0

'egpre'は' grep'の拡張バージョンです。これは似ていません –

+0

[ここをクリック](http://unix.stackexchange.com/questions/17949/what-is-the-difference-between-grep- egrep-and-fgrep) –

+4

あなたの正規表現は間違っているようです。 '[SELECT] {6}'はS、E、L、C、Tアルファベットの6文字を必要としていると言います。SELECTにマッチしますが、TECLESとEEEEEEにもマッチします。 – vdavid

答えて

6

{6} "SELECT" だけでなく "ELSLET" 又は6 C、Eのいずれかの組み合わせ、L、S、T一致[SELECT]。 "SELECT"にのみ一致させるには、単に "SELECT"を使うだけです。あなたが使用することを検討して書いたテストラインと一致するように

grep -E "SELECT\[email protected]_id_n\s*=\s*[1-9]+[0-9]*" 

を「\ s」はスペースやタブなどの任意の空白文字と一致します。 「+」は1以上を意味し、「*」は0以上を意味します。正規表現は、上記の「=」の右側の数は0

+1

ちょうどノート: '='のまわりに空白を入れないOP。 (彼は '{0,50}'を使用しています)。だから、 '\ s + = \ s +'の代わりに '\ s * = \ s *'を使うのが良いでしょう。 – jm666

+0

@ jm666あなたは正しいです – silel

+3

@silel:うまくやったけど、疑問に思う: 'egrep'は(a)[陳腐化](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/grep.html)です。 (b) 'grep -E'のエイリアスだけを効果的に使うので、' grep'タグは完全に正当です。あなたの答えからコメントを削除し、 'grep -E'を代わりに使うことをお勧めします。 – mklement0

1

これで始めることができないことを前提としてい

注@ silelの素敵な答えに加えています。 grep -Eegrepと同じです。

echo grep -E 
grep -E '^\s*SELECT\[email protected]_id_n\s*=\s*[0-9]+\s*$' <<EOF2 
SELECT @clnt_id_n    = 38404 
ELECTS @clnt_id_n    = 38404 
SELECT @clnt_id_n=38404 
XSELECT @clnt_id_n=38404 
SELECT @clnt_id_n=xxx 
EOF2 

#If your `grep` knows the `-P` option, then you could shorten even more: 

echo grep -P 
grep -P '^\s*SELECT\[email protected]_id_n\s*=\s*\d+\s*$' <<EOF 
SELECT @clnt_id_n    = 38404 
ELECTS @clnt_id_n    = 38404 
SELECT @clnt_id_n=38404 
XSELECT @clnt_id_n=38404 
SELECT @clnt_id_n=xxx 
EOF 

上記プリント:

grep -E 
SELECT @clnt_id_n    = 38404 
SELECT @clnt_id_n=38404 
grep -P 
SELECT @clnt_id_n    = 38404 
SELECT @clnt_id_n=38404 

私はフルラインに正規表現をアンカー(ただし、どこでもスペースを許可します)。それが望ましくない場合は、上記から^\s*\s*$を削除してください。

関連する問題