※ ChatGPTを利用し、要約された質問です(原文:ファイル内の複数の特定文字列を抽出する方法)
ファイル内の特定文字列を抽出する方法
この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
お礼
こんなにシンプルに出来るのですね。 完璧です。大変参考になりました。 ある程度Linuxにも慣れてきたつもりなのですが まだまだ勉強しなければならないことが多いようです。 ありがとうございました。