2016-09-30 9 views
0

grepと一致する結果を得るためにちょっと唖然としています。グレープが正規表現に一致していません

次の入力ファイルの内容を考えると、{ "foo" という:29、 "バー":30}

して、次のコマンドgrep -o '"[^"]+":[0-9]+' input.txt、私は2つのマッチング結果を期待しています。私が知っている限り、正規表現をサポートしていますが、なぜgrepが結果を返さないのか分かりません。

regexpの他の実装は正常に動作しています(https://regex101.com/r/RcONXk/1)。

+3

grepコマンドラインに '-E'を追加してみてください。 – dawg

+0

'-E'は動作するようですが、' -e'は動作しません。私は拡張regexpについてもっと読む必要があると思う:)。それを回答として投稿できますか? – Caramiriel

+1

'-e'は次の引数として正規表現を取るだけです。たとえば、正規表現がダッシュで始まる場合などの問題を避けることができます。あるいは、複数の正規表現を持つことができます。 –

答えて

2

これを試すことができます。

grep -oE '"[^"]+":[0-9]+' 

例:

[email protected]:/tmp$ echo '{"foo":29, "bar":30}' | grep -oE '"[^"]+":[0-9]+' 
"foo":29 
"bar":30 

男のgrep:

-E, --extended-regexp 
       Interpret PATTERN as an extended regular expression (ERE, see below). (-E is specified by POSIX.) 

Basic vs Extended Regular Expressions

0

デフォルトでは、grepは正規表現と一致しません。

または、egrep(自動的にpatternを正規表現として扱います)を使用してください。

egrep -o 'pat' file 
+0

これは( '-e'のため)動作しませんが、他のコメントは私に' -E'を指摘してくれました。 – Caramiriel

+0

-Eは拡張正規表現ですが、-eは正規表現です。私の悪い! –

+1

問題ありません、お手伝いをありがとう! :) 'egrep'も動作します – Caramiriel

関連する問題