ファイル内の特定文字列を抽出する方法

このQ&Aのポイント
  • linuxで、あるファイル内の特定のパターンに該当する文字列の抽出方法を教えてください。
  • 特定のパターンはファイル内のどこに出現するか分からないため、正規表現を使用します。
  • 具体的には、grepコマンドとsedコマンドを組み合わせて使用することで、特定のパターンに該当する文字列を抽出することができます。
回答を見る
  • ベストアンサー

ファイル内の複数の特定文字列を抽出する方法

ファイル内の複数の特定文字列を抽出する方法 linuxで、あるファイル内の特定のパターンに 該当する文字列の抽出方法を教えてください。 やりたいこと・前提条件 (0)linuxといいながら実はCygwin(タブン影響しないと思う) (1)特定のパターンはファイル内のどこに出現するか分からない (2)特定のパターン文字列中には改行は含まない。つまり必ず同一行内 (3)特定のパターンはファイル中に0回以上出現する (4)まったく同じ文字列は省きたい (5)特定のパターンは同一行中に複数回出現することもあり、すべて抽出する とりあえず、以下のコマンドを書きましたが不十分です。 grep -E "${PATTARN}" log.txt | sed -r "s/^.*(${PATTARN}).*$/\1/g" | sort -u これだと、(0)~(4)までの希望は実現できました。 (5)が未実現です。 JavaとかJavaScriptとかvbsとかなら正規表現にヒットした複数の文字列を 連続的に取り出して処理する方法は思い浮かぶのですが、 linuxコマンドの範囲だとどうすればいいかよくわかりません。 (5)を実現する方法。これを教えてください。 参考情報としてサンプルファイル内容と正規表現パターン・ 得たい結果も書いておきます。よろしくお願いします。 ◎参考 ○log.txt -------- RASCAL-1, RASCAL-123 [RASCAL-456] *** ** * *** [RASCAL-1] RASCAL-456 RASCAL-45 -------- ○PATTARN=RASCAL\-[0-9]{1,5} ○得たい結果 RASCAL-1 RASCAL-45 RASCAL-123 RASCAL-456

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4847/10260)
回答No.1

grep -o -E "RASCAL-[0-9]{1,5}" log.txt | sort -u ただ、sort -u だと、 RASCAL-1 RASCAL-123 RASCAL-45 RASCAL-456 になると思いますが。ハイフンの後を数字順にしたければ、sort -u -t- -k 2n

mibusys
質問者

お礼

こんなにシンプルに出来るのですね。 完璧です。大変参考になりました。 ある程度Linuxにも慣れてきたつもりなのですが まだまだ勉強しなければならないことが多いようです。 ありがとうございました。

関連するQ&A

  • 特定の文字列が一致する行から、文字列を抽出する方法

    ファイルから、特定の文字列を検索し、その文字列に対応する文字列を取得したいのですが、どなたか方法を教えていただけないでしょうか? 処理: test.txt中に以下の文字列が記載されています。 ----- TEST011:FILE00 TEST01:FILE01 TEST02:FILE02 XTEST01:FILE01 XTEST02:FILE02 ----- test.txtから、TEST01に対応する文字列FILE01を取得したいです。 当初、strchrを利用すれば良いかと考えていたのですが、 TEST011の行が先に抽出されてしまい、うまくいきません。 どなたか解決方法を教えていただけないでしょうか。

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

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

  • VBAを使ってHTMLソースから特定の文字列を抽出したいと思っています

    VBAを使ってHTMLソースから特定の文字列を抽出したいと思っています。 正規表現を利用してタグに挟まれた文字を抽出したいのですがうまくいきません。 タグごと抽出する方法でも構わないので教えてください。 例えば <a href="www.yahoo.com△">○○○</a>   ・・・<1> ※△は(www.yahoo.com)+(半角数字1文字) ※○○○は1文字以上の全角文字 このようなパターンの文字列(<1>を丸ごと)を抜き出すには どのような正規表現を書けばよいでしょうか? 単に<a href ではじまって </a>  で終わる文字列であれば <a href.*</a> で良いと思うのですが、もう少し範囲を絞れば目的の文字列だけを抽出できるので ぜひ実現させたいと思っています。宜しくお願いします。

  • 複数のテキストファイルの中から、特定の文字列を検索するソフト

    題の通りです 複数のtxtファイルを選択し、その中から特定の文字列を一斉検索し、文字列の入ったファイルを探し出すソフトはないでしょうか?

  • DOS 特定の文字列を含むファイルのみの抽出方法

    C直下に2つのテキストファイル「A.txt」「B.txt」が存在するとします。 Aには「Start」、Bには「Second」という文字列が含まれているとします。 これらのテキストを、BATを使って『テキスト内に特定の文字列が含まれているファイル』のみをDOSプロンプト上に表示する方法をご教示願います。 ■想定するコマンド実行結果 ・Start.BATを実行→DOSプロンプトにて「A.txt」のみが表示する。 ・Second.BATを実行→DOSプロンプトにて「B.txt」のみが表示する。 よろしくお願いします。

  • 最新日付のファイルから【CCC】の文字列を抽出する方法を教えてください

    最新日付のファイルから【CCC】の文字列を抽出する方法を教えてください。 ディレクトリの中は下記の状態となっております。 -rwx------+ 1 ccc なし 41 Jun 17 13:18 bb_2345_5554.txt -rwx------+ 1 ccc なし 41 Jan 23 18:11 bb_2356_1457.txt bb_*_*.txtの数字部分がランダムとなっており、たくさんファイルがあり最新ファイルの文字列(ccc)のみを抽出する方法がわからなくて悩んでおります。 スクリプトで自動的に抽出する方法がわからなくて、どなたかご教授をお願いします。

  • 複数のファイル(html・txt)から文字抽出

    こんにちは。 複数のファイルから特定の文字を抽出する方法を考えています。 出来るのか出来ないのかも自分ではわかりませんでしたので質問させていただきました。 やりたいこととしては 50000を超えるファイル内部の特定の記述部分を抜き出したい。 (抜き出す or 残す(その記述以外の文字は不必要なため)) ファイルの中に記述されている残したい文字は user="*****" の*****部分。 *****は数字が連番で振られている。 複数のファイルから文字を抽出するToolとか方法(batファイルを作る等?)はありませんでしょうか。 参考となるサイト等でもわかればなんとかします。 どうかお願いいたします。

  • 複数のファイルに同じ文字列を自動入力するバッチ

    複数のテキストファイルに同じ文字列を入力して保存するバッチを作成したいです。 テキストファイル1.txt テキストファイル2.txt テキストファイル3.txt 上記3つのテキストファイルがあったとしてバッチを起動すると 同じ文字列のデータを自動的に入力したい。 自動入力する文字列:あいうえお そもそも実現可能なのかもよくわかっていませんが ご教示いただけますと幸いです。

  • 特定文字列の抽出

    VB6の質問です。 桁数、データが不定の文字列中から特定文字を抽出したいのでが、方法を教えていただけないでしょうか? 抽出したいデータの桁数が毎回不定でMid, Left, Right関数が使用できません。 Dim Buffer As String Buffer = "A12345...B678910.TRAGET..C" '桁数、データが不定の文字列がBufferに入ります。 例えば、変数Bufferから、桁数を考慮しないで"TARGET"の文字列を抽出したのです。 InStr関数で、位置を特定して、Mid関数などで抽出するれば、良いと思うのですが これをどんな桁数のときも対応できるようにルーチン化にできないでしょうか?

  • 特定文字列間の文字列の抽出の際についての質問なのですが、

    特定文字列間の文字列の抽出の際についての質問なのですが、 例 xxxxxaiueoyyyyyaiueoyyyyy となっている場合aiueoだけを抽出したいのですが、 sed -n 's/.*xxxxx\(.*\)yyyyy.*/\1/p' とすると aiueoyyyyyaiueo が出力されてしまいます。 エンド文字が複数あった場合最初にマッチしたものまでの抽出は どのようにしたら宜しいのでしょうか?