• ベストアンサー

grepにマッチした正規表現の文字列を取得したい

grepにマッチした正規表現の文字列を取得し、マッチした文字列を 一覧で取得したいのですが、方法がわかりません。 ※例 grep [0-9][0-9][0-9][0-9][0-9] 検索ファイル名 > 出力ファイル名 不明点あればお知らせください。 よろしくお願いします。

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

UnixやLinuxなら、まずは man grep してみること。 GNU版のgrepなら --help オプションでもかなり詳細な説明が見れます。 GNU grepのマニュアルより > -o, --only-matching > Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line. GNU grepのヘルプより > -o, --only-matching 行の中で PATTERN に一致した部分のみ表示する こういうことですか? ただ、この方法はその行で最初に見付かったものだけ出力されるので、1行に複数マッチする場合には使えませんが。 POSIXのgrepには-oは無いようなので、sedかなんかで抜き出すことになります

mameo0922
質問者

お礼

-o オプションなんてものがあったんですね。 やっぱりぐぐってばかりではなく、マニュアル見るべきですね。。 想定通りの結果を得ることができました。 ご回答ありがとうございました。

その他の回答 (1)

回答No.2

例の通りだと、マッチした行全体が出力されてしまうのが不満 ということでしょうか。であれば grep -o [0-9][0-9][0-9][0-9][0-9] 検索ファイル名 > 出力ファイル名 でどうでしょう? 上記でダメなら補足してもらわないと、見当がつかないです。 一応、以下が当方の環境です。 cygwin 1.7.9-1 grep 2.6.3

mameo0922
質問者

お礼

お察しの通りでございます。 ご回答ありがとうございました。

関連するQ&A

  • 正規表現でマッチさせたい文字列の指定方法

    正規表現でマッチさせたい文字列の指定方法について こんにちは。正規表現について教えてください。 秀丸エディタでgrepする時に先頭行に 『ファイル名(行数): 』という文字列が 先頭行に入りますが、これを正規表現を使用して消したいと思っています。 具体的には以下のような表現ですが、どのように指定するのが正しいでしょうか。 いくらかテストしているのですが、なかなかうまくできず困っています。 消したい文字列 test.log-110411-01.bak.text(38): よろしくお願いします

  • 【正規表現】コメントアウトされていない文字列のマッチ

    お世話になっております。 あるファイル群にgrepをかけて結果を取得したいのですが あと半歩という所でつまづいています。 正規表現の考え方のご示唆をいただけませんでしょうか。 宜しくお願い致します。 ■やりたいこと コメントアウトされていない文字列のマッチ ■対象文字列 1行目:ほげ 2行目://ほげ 3行目:// これは否定 ほげ 4行目:ほげ //ここにコメントがはいるとひっかからない(><) ■コメントアウト文字 // 1行目と4行目の「ほげ」をマッチさせたいのです。 正規表現の先読み否定を使って ^(?!//.*)ほげ$ 行頭から、「//」が後に続かなくて「ほげ」がある行末 とやってるのですが、 4行目がひっかかりません。 (?!//.*)の部分で、「//」から「ほげ」までを否定している為だと思うのですが、どのように考え、どのように記載すればスマートでしょうか。 お忙しい所恐縮ですが アドバイスいただければ幸いです。 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • 正規表現:文字列の最後にマッチした文字以外を取得

    phpを使って、正規表現と関数で文字列の編集を行っているのですが いい方法が思いつきません。 やりたいことは以下のようなことです。 $find ="\n"//マッチさせたい文字 $string = "リンゴ、空、\nミルク、車\n";//検索対象 $str=関数($string);//わからない部分 print($str); ↓表示結果 リンゴ、空、\nミルク、車 文字列のインデックスの0から、最後にマッチした文字列の直前までを取得するにはどうしたらよいでしょうか。 またこのような表現には何か名前がついていますか? ご教授ください。

    • ベストアンサー
    • PHP
  • 正規表現を教えてください。

    正規表現を教えてください。 C#で正規表現を用いた文字列検索を勉強中なのですが、うまくマッチさせることができません。教えていただけないでしょうか。 検索対象の文字列は下のようになります。 キーワード;値; 文字列中に該当するキーワードが存在する場合に、その値を取得するプログラムを考えています。しかし、私の正規表現では2つ目の「;」を検出してしまい、キーワードのみを取得することが出来ずに困っています。 見当違いの表記をしているとは思うのですがどなたかお助けください。 match = Regex.Match(line, "^(.*);"); C#初心者なものです。

  • ''で囲まれていない文字列にマッチする正規表現

    下記のような文字列($str)に対して置換を行い、 my $str = qq{ AAA = BBB - 'CCC' }; $str =~ s/★正規表現★/sprintf("DDD(%s)",$1)/xmsge ; 変換後 $str = DDD(AAA) = DDD(BBB) - 'CCC' ; を実現する★正規表現★を書きたいと思っています。  ・AAA,BBB,CCCは[\w]で構成される文字列です。 ですが、シングルクォーテーション('')で囲まれていない文字列にマッチする正規表現が書けなく困っています。 一度、シングルクォーテーションで囲まれているものも含めて全てDDD()をつけて、そのあとで、シングルクォーテーションを含むものは元に戻すことでやりたいことは実現できているのですが、1行で実現できる方法を探しています。 アドバイスよろしくお願いします。

    • ベストアンサー
    • Perl
  • 正規表現でのマッチを複数取得したい

    正規表現にて、文字列のhtmlタグ部のみを配列にして取得したいのですが、初めにマッチする1つしか返り値を取得できません。 ----ソース--------------------- $this->target_str <<<EOS <test1>aaa</test1> <test2>bbb</test2> EOS; preg_match ( "/<.*?>/imsu" , $this->target_str, $RES_ARR ); ------------------------------- 上の例だと、 $RES_ARR[0] => "<test1>" となり、残りのタグは取得できないのです。 google検索にて発見した、'マッチした後も続けて検索する'というオプション'g'をつけてみたのですが、'g'に対してエラーが出てしまいます。 どなたか解決策をお持ちの方いらっしゃいましたらよろしくお願いします!

    • ベストアンサー
    • PHP
  • 正規表現を使った文字列の抽出方法について

    正規表現を使った文字列の抽出方法について RHELを使っています。 テキストデータの中に、以下のようなデータが 百万行単位で並んでいます。(カンマ区切り、2列構成) 1, 1.24425 2, 3.25252 (中略) 13, 6.25365 14, 8,36222 (中略) 103633, 252525.0 最終的にやりたいことは2列目のデータのみの抽出です。 考え方として、正規表現で 「<任意の文字列の連続><カンマ>」という文字列を認識させ、 それを「空欄」で置換したいと考えています。 文字列の最後の文字をマッチさせる指定子が「$」という情報をWebで見つけたので まず、grepで見つけられるか以下のようにやってみたのですが、 grep -i ",$" test.txt $が環境変数と取られ、構文エラーとなってしまいます。 使い方がおかしいのでしょうか? ちなみに、うすうす感じている疑問として、「$」は文末にくるものしかマッチしなかったり しますでしょうか? カンマ区切りなので、表計算ソフトを使えなくもないですが、 行数がExcel2007の限界をよく超えるので、それ以外の方法で考えています。 アドバイスよろしくお願いいたします。

  • preg_match : マッチした位置の取得

    phpにおける正規表現で、パターンにマッチした位置を取得したいのですが、引数で検索する位置を指定することはできても容易に取得する方法がみあたらないので困っています。 マッチした文字列を strstr() を使って位置取得するという方法しか思い浮かばないのですが、どうにかならないでしょうか。

    • ベストアンサー
    • PHP
  • [15]にマッチする正規表現

    [15]にマッチする正規表現 [15] にマッチする正規表現を書きたいのですが、うまくいきません。。。。 簡単だ、と思ったのですが。。。 expr "$DATA1" : .*\[15\].* と書くと、中の数字が15じゃなくてもマッチしてしまいます。 expr "$DATA1" : .*15.* であれば"15"にマッチしますが、対象の文字列の都合上、カッコでも識別する必要があり 困っております。[と]をエスケープする目的で\をつける、と思っているのですが、何か 思い違いをしているのでしょうか。

  • 正規表現にマッチした文字列の抽出

    閲覧頂きありがとうございます。 Linuxのsedコマンドに該当するwindowsコマンドは存在しますでしょうか? 存在しない場合、batやマクロでの長い記述となってしまっても構いません。 検索で調べたところ、特定のdllを入れればsedを使用できるとあったのですが、その方法は取りたくありません。 100万行以上あるテキストファイル(一行=一レコード)の中から、正規表現とマッチする文字列の抽出作業です。 1行に1つ、不特定な場所にその文字列が存在するという形です。 その抽出した文字列を、別のテキストファイルへ吐き出す…といった処理を想定しています。 どうかご教示いただけると幸いです。 環境 windows7、EmEditor使用

専門家に質問してみよう