正規表現を使った文字列の抽出方法について

このQ&Aのポイント
  • RHELを使っている場合、正規表現を使ってテキストデータから特定の文字列を抽出したい時、grepコマンドを使用することができます。しかし、環境変数の「$」が構文エラーを引き起こすことがあります。
  • 正規表現で「<任意の文字列の連続><カンマ>」という文字列を認識させ、それを「空欄」で置換することで、特定の文字列の抽出が可能です。
  • また、正規表現の指定子「$」は文末にくるものしかマッチしないため、文字列の最後の文字をマッチさせることができます。ただし、grepコマンドでは環境変数の「$」が問題となる場合があります。
回答を見る
  • ベストアンサー

正規表現を使った文字列の抽出方法について

正規表現を使った文字列の抽出方法について 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の限界をよく超えるので、それ以外の方法で考えています。 アドバイスよろしくお願いいたします。

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

  • ベストアンサー
noname#163669
noname#163669
回答No.2

grepではなくsedとかawkだと以下で実現出来ると思います。 $ sed -e 's/^.*,//' test.txt $ awk -F, '{print $2}' test.txt

--HV--
質問者

お礼

ご回答ありがとうございます。 grepでマッチング確認した後、sedに入ろうと思ってましたが、 一足跳んで答えを教えて頂き、感謝です^^ ^ 行頭から始まる . 何か一文字が * 0文字以上マッチングして , カンマがある という表現をすればいけるんですね。 テスト環境には明日昼にならないといけませんが試させて頂きます。 どうもありがとうございました。

その他の回答 (1)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

""じゃなく、''でくくれば変数として扱われなくはなりますが、 期待通りの結果は得られませんね。 awkをつかって awk -F, '{print $2}' test.txt とでもした方が楽じゃないでしょうか。

--HV--
質問者

お礼

ご回答ありがとうございます。 そうですね、シングルクォーテーションでくくれば、展開されないですが、 うまくいきませんでした。 grepでできないのもわかってましたが、 まずマッチングができれば、sedでできるかなと考えてました。 最もsedもこれから書式を調べるところだったのですが、、、 まずは正規表現をうまくやることから、、と思い。 awkは、存在は知ってましたが、まだマニュアルの理解が大変で、、;; sedを勉強したのちにやってみることにします。

関連するQ&A

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

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

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

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

  • PHP 正規表現 文字列抽出

    PHP 正規表現 文字列抽出のご質問です。 ある文字列の中から「○○%OFF」の○○の部分を抽出したいのですが。 分かる方いらっしゃったら、ご教授ください。

    • 締切済み
    • PHP
  • 正規表現を使って行数毎の数字を抽出したいです。

    正規表現を使って行数毎の数字を抽出したいです。 -ウェブに表示されている文字列--- 101 100 99 98 ...... -------------------- この表示が1行につき3文字固定であれば以下でできました。 (/(\d{3})/, '<a href="foo/\1">\1</a><br/>')

  • 正規表現を使った文字列の切り出し

    こんにちは ver_51 と言います. 決まったパターンの文字列から正規表現を使って抽出する方法で悩んでいます. 文字列のパターンは以下の通りです. 任意の文字列は.*で表しています. String line = ".*<a href=".*" .*">抽出したい箇所1</a>.*<a href=".*" .*">抽出したい箇所2</a>.*以下同じように続く"; String tray = new tray[100]; 実現したいことは正規表現を使って抽出したい箇所がある限り,trayに順番通りにいれるというものです. この場合だと tray[0]="抽出したい箇所1"; tray[1]="抽出したい箇所2"; ・ ・ ・ と入ってほしいです. お手数ですが,どうぞ宜しくお願い致します.

    • ベストアンサー
    • Java
  • 正規表現で()で括られた文字列を()ごと削除したい場合、どのように抽出

    正規表現で()で括られた文字列を()ごと削除したい場合、どのように抽出すればよいでしょうか?

  • 正規表現について

    正規表現について LPIC黒本の問題で1つ困っています。 $ grep -E ^A[^A]A[^A] lpic.txt にマッチする文字列 答え AaAa となっていますが理解できません。 そもそも正規表現ってなんでしょうか? あまり難しいようなら飛ばしますが、 となたか教えてくれるお方おりましたらお願いいたします。

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

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

  • perl 正規表現 抽出

    perl の正規表現を用いて、文字列の抽出を行いたいのですがどのように 書けばいいのかわかりません。 実現したいことは 「Y:/フォルダ名/フォルダ名/ファイル名.拡張子」 というテキストに対して 「拡張子」のみを抽出することと 「ファイル名」のみを抽出することです。 パターンマッチや変換はなんとなくわかるのですが 抽出の仕方がよくわかりません。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 秀丸の正規表現(HMJRE.DLL V1.92)で、

    秀丸の正規表現(HMJRE.DLL V1.92)で、 以下のことが可能かどうか教えてください。 ある2つの文字列のいずれも含まない行を 正規表現とGREPで抽出したいのです。 (ほかの手段でもかまいません) たとえば AAAA ABCDEF BCDEFG EFGHI といったテキストデータがあった場合 "ABC"と"DEF"のいずれも含まない行であれば AAAA EFGHI を抽出したいのです。 以上、よろしくお願いします。