0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

sed や grep などの -e と -E は機能として対称ではない

Posted at

していた勘違い

option 勘違い
-e 基本正規表現。複数個書ける。
-E -e の拡張正規表現版。複数個書ける。

例えば grep -e xxx -e yyygrep -E xxx -E yyy とも書けると思っていた。

正しくは

-E は、拡張正規表現を使うためのフラグ。よって -E を複数個書けないし、そもそも expression を引数にとることができない。

# イケる
$ echo aaa | grep -e bbb -e 'a\{3\}'
aaa

# イケない
$ echo aaa | grep -E bbb -E 'a{3}'
grep: a{3}: No such file or directory

cf. man grep

       -E, --extended-regexp
              Interpret PATTERN as an extended regular expression (ERE, see below).
             :
       -e PATTERN, --regexp=PATTERN
              Use PATTERN as the pattern.  If this option is used multiple times or is combined with the -f (--file) option, search for all patterns given.  This option can be used to protect  a  pattern
              beginning with “-”.

まとめ

基本のキではあったが -E は引数をとらないフラグ、という理解がなかった。
もし拡張正規表現を複数定義したい場合は -E と -e を組み合わせればよさそう。

$ echo aaa | grep -E -e 'bbb' -e 'a{3}'
aaa
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?