• ベストアンサー

grepでfooかbarを含む行を表示するにはどうすればよいですか。

grepでfooかbarを含む行を表示するにはどうすればよいですか。 イメージ的には、 command | grep 'foo|bar' のようなことをしたいのです。

質問者が選んだベストアンサー

  • ベストアンサー
  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.1

一行で書かないと駄目ですか? grepのfooの結果をリダイレクトして、それにgrep barの結果を追加(>>)した後vi等のエディッタで ゆっくり検索しても結果は同じような・・・。 検索するとegrepとか、-eオプションが有りますね。 http://www.rep1.co.jp/staff/200vcxg/217rav/grep_andor_lcd_-linux_command.htm http://araistudy.g.hatena.ne.jp/iwaseki/20061027/p1 まあ、どれでも同じ様な事は出来そうです。

zyousuke
質問者

お礼

こんばんは。 ご紹介いただいたページを見てみると、何とおしいことに! command | grep 'foo|bar' ではなく、 command | grep 'foo\|bar' のように|をクォートしてやる必要があったのですね!! 私としたことが、早とちりな質問をしてしまいました。 それにしても思ったページを検索するのが上手ですね。 私は「grep 正規表現 論理和」のようなキーワードで検索したのですが、 なかなか思ったページにたどり着けず、ついには質問してしまったという訳です^^;

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4845/10256)
回答No.3

正規表現には、grep の解釈する "(狭義の)正規表現"と、egrep の解釈する "拡張正規表現"があります。これらでは、"グルーピング"の () や "または"の | を、\( \) \| と書くか、( ) | と書くかの違いがあります。 ウエブ上では、各種プログラミング言語の正規表現の説明が多いのですが、これらは 拡張正規表現 ないし さらにそれの拡張版となっているので、「"まはた" は | と書く」と書かれていることが多いです。 お調べになったように、grep の場合は、\| と書き、egrep や grep -E の場合は | と書きます。

zyousuke
質問者

お礼

こんばんは、 egrepやgrep -Eの場合は|をクォートする必要がないのですね。 egrepはgrepのマニュアルページに一緒に出てきますが、使ったことはありませんでした;;

回答No.2

ANo.1 さんが既に書き込まれておりますが、 grepの"-e"オプションにて複数指定ができます。 command | grep -e foo -e bar これでOKです。

zyousuke
質問者

お礼

こんばんは -eオプションでも複数のパターンを指定できるのですね! でも私的には、正規表現を使った方が、 よりカッコいいイメージがあるので、正規表現を使うことにします^^

関連するQ&A

  • grepを使って100行目の数を表示したい

    terminalで seq -100 2 300 と打つと -100 -98 -96 ・ ・ ・ 300 と-100から300まで表示され、この100行目の数をgrepを使って表示させたいのですが、どうすればよいか分かりません。 どなたか回答お願いします。

  • foo bar baz qux・・・・?

    himajin2003の頃 「hogeの意味」について聞いたことがあったが 今回はその第二弾である。 今日、あるサイトのコンテンツを見ていたら 「quxは知る人ぞ知る、foo bar bazの次である」という記述を見つけた。 基本的に僕が見たことがあるのはfoo bar までであり、今日知ってびっくりした。 さて、これって何の順番なのでしょう? 何が根拠なのでしょう?

  • grepコマンドの使い方

    下記のようなファイルがあるとします。 カレントディレクトリ /home から"hello"という文字列が含まれるテキストを grepしたい場合、コマンドはどのようにすればいいのでしょうか? 色々な方法があると思いますが、よろしくお願いします。 ---------------------------------------------------------------------- /home/hoge1/foo1.txt foo2.exe foo3.txt /home/hoge2/hogehoge2/foo4.txt foo5.exe /home/hoge3/hogehogehoge3/foo6.txt foo7.exe foo8.zip ----------------------------------------------------------------------

  • Ruby インスタンス変数@fooを持つClass Fooの中ので関数fooを呼ぶ

    #!/usr/bin/ruby def foo(arg) arg.upcase end def bar(arg) arg.upcase end class Foo attr_reader :foo def initialize(arg) @foo = foo(arg) #@foo = bar(arg)とすれば期待した結果が得られる end end f=Foo.new("hoge") puts f.foo 上記実行するとエラーになります。 Class Fooの中のでfooといえば、インスタンス変数@fooであって、関数のfooではないって事なのでしょうか。 インスタンス変数@fooを持つClass Fooの中ので関数fooを呼ぶことはできないのでしょうか?

  • Solarisでのgrepについて

    Solarisのgrepには、前後の行を表示するオプションがないと 思います。 GNUのgrepを使用できない(構成を変更できない)環境ですが、 Linuxのgrepでいう[-A]や[-B]オプションを使用したシェルが 必要になり困っています。 できれば、下記のgrepのように|(パイプ)で挟んで使用している 状態にしたいのですが、コマンドやオプションを教えていただけ ませんか? ***|grep -B1 ***|*** シェルを早急に作成する必要がありますが、知識が乏しく 大変困っています。 よろしくお願いいたします。

  • grepで検索行以外の行を抽出する方法

    grepをかけると検索文字列を含む行を抽出しますが 検索文字列を含む行とその前後の行も出力したりできるのでしょうか? よろしくお願いします。

  • grepでの抽出について

    solarisでgrepを使ってログの抽出を行っているのですが、 123のある行を抽出したいとき、grep 123 ファイル名とすると 1234のある行も一緒に抽出されると思います。 これを123のみ抽出させる方法を教えてください。

  • 改行を含んだgrep

    お世話になっております。質問です。 エディタでサクラを使っています。 改行を含んだgrepはできますか? また、以下のやりかたを見ていただいて、良いやり方がありましたらご教示下さい。 ABCを含んだ行を対象に、;(行の終わり)までを抽出したいのです。 現在以下のような条件でgrepしていますが、ABCを含む行全てが抽出されません。 ABC.*(\r\n)*.*; また、以下のようにgrepすると、ABCを含む行全てがgrepされますが、対象ファイル内で改行されていた場合、;まで抽出されず、改行場所までしか抽出されません。 ABC; 詳しい方、宜しくお願い致します。

  • 一般的なエディタで1行目を対象としたGREP

    一般的なエディタで1行目の文字列検索(GREP)はできるものでしょうか。 (例) テキストファイルの一番上に 「Option Explicit」という文字があれば、リストを表示する。 #ちなみに私はVIVIを使っています。(素人レベル)

  • grepで全角文字の行を抽出

    grepの検索でテキスト内のひとつでも全角文字がある行を 抽出したいと思ってます。1つの方法は見つかったのですが、 時たまバグがあるそうですので、 他の方法を探そうと思ってます。 わかっている方法は、以下のとおりです。 > grep -n '.*[^ -~。-゜].*' test_data.txt よろしくお願いします。