• ベストアンサー

テキストから複数の任意の文字列を含んだ行を抽出したいです

cat test.txt | grep aaabbb とするとaaabbbを含んだ行を抜き出せるんですが、 aaabbbまたはcccdddという文字列を含んだ行を抜き出したいときにはどうすればいいでしょうか? どちらか一方もしくは両方を含んだ行を抜き出してほしいです。 ログを見る際に使いたいのでコマンド一つで出来ると助かります。

  • sin11
  • お礼率53% (145/270)

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

  • ベストアンサー
  • you-m
  • ベストアンサー率58% (190/327)
回答No.1

とりあえず、その要件を満たすだけなら、こういった記述になります。 cat test.txt | grep -E 'aaabbb|cccddd'

その他の回答 (1)

回答No.2

egrep "aaabbb|cccddd" test.txt ですね。grepにEオプションを付けたのとgrepをegrepにリネームしたものは同じになります。

関連するQ&A

  • 複数の文字列を検索

    あるログファイルの文字列を取得して。検索でヒットした文字列行 を返すスクリプトを作成しております。 検索:"OK"    日付 対象行 : OK! Tue Jul 19 文字列"OK"は普通に # grep "OK" ログファイルPath で検索できますが、 文字列と日付を両方引っ掛ける場合は・・・ grep -e "OK" -e env LANG=c date -u +"%a %b $d" ログファイルPath 当然コマンドエラーになります。 dateコマンドから日付を取得して、grepにて引っ掛ける方法を知りたいので すが、お分かりになる方、ご教授お願い致します。

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

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

  • awkで可変文字列をマッチング

    シェルなどでawkを使う際に、シェルの引数として渡された文字列をawkに渡し、それを条件にマッチングをかけたいのですが、どうしたら良いのでしょうか?(まあ、素直にgrepを使えばいいのですが・・・) 例えば、 cat foo.txt | awk '{if ($2 == ptn) print}' ptn=$<シェルの引数> とかやれば、2番目のフィールドに完全に一致する行が抽出できるのですが、 cat foo.txt | awk '/ptn/ {print}' ptn=$<シェルの引数> とかやっても、"ptn"という文字列をマッチングしてしまうので、うまくいきません。どの位置に出現するかわからないけど、シェルの引数で指定された文字列が含まれている行だけを出力したい場合、どうしたらよいのでしょう・・・。

  • grepで検索文字列が完全一致した行だけ取り出す方法

    grepの文字列検索で検索文字列が単語として、完全一致した行だけ取り出す方法はないでしょうか? 通常は grep hoge hoge.txt と打つと、hogeが含まれる行が出力されますが、今回は含まれる行ではなくて完全に文字列が一致した行だけ取り出したいのです。 例えばhoge.txtの中に cc ghoge kkl hogem jjll hoge という3行があったとしたら最後の行でhogeという文字が空白で区切られた行だけ取り出したいのです。 何かよい方法があれば教えてください

  • 指定した文字列を含む行から、指定した文字列を

    含む行まで、全ての行を抽出して別ファイル(名前は元ファイルと同じ)としたいのです。 対象ファイルに結果を上書きでもかまいません。 指定したフォルダの中にある複数のフォルダ各々に1つずつ入っているテキストファイルが対象になります。 例) 東京都 新宿区 <start123AAA> 東京都 港区 <end>AAABBB 東京都 目黒区 どのファイルにも必ず<start と<end の文字列があります。(必ず1組です) <start の文字列を含む行から <end の文字列を含む行までを 抽出したいのです。 (欲しい結果↓) <start123AAA> 東京都 港区 <end>AAABBB フリーのエディタソフトのgrep、grepのマクロ、バッチでできないものかと試してみているのですが どうしてもうまくいきません。 抽出したい範囲、削除する範囲には禁則文字?が入っているのでバッチは難しいのでしょうか? できればバッチで処理できればなと思っているのですが、うまくいきません。 (<>!""/ あたりが入っています。別の文字に置き換えることは可能です) 範囲を抽出ではなく、 <startを含む行の一つ上の行から前を全て削除 <endを含む行の一つしたの行から後を全て削除 する方法や VBAで、スタート行をとエンド行をSearchして抽出する方法など ご教授いただきたくお願い致します。

  • アスタリスクを文字列として変数に入れるには

    HP-UX cshで、アスタリスクを文字列として 変数に入れるにはどうしたら良いでしょうか? 現在は <file3の中身> grep -v file*.txt | grep -v file2.txt で、 set hensu=`cat file3.txt`としてecho $hensuすると grep -v file1.txt file2.txt file3.txt | grep -v file2.txt という具合に、アスタリスクがワイルドカードとして 働きます。これを「file*.txt」という文字列として 変数に入れる方法を教えてください。 宜しくお願いします。

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

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

  • bashでの複数行のコマンドのリダイレクト

    Linux上のbashを使用して、複数行のコマンドの結果を一度にリダイレクトしたいと思います。 思いついた方法が、 #!/bin/bash cat << EOF >> ./test.log cat /etc/fstab cat /etc/inittab cat /etc/modprobe.conf EOF といった方法なのですが、これですとそれぞれのコマンドの結果ではなく、 単に cat /etc/fstab cat /etc/inittab cat /etc/modprobe.conf と言った出力結果がtest.logに出力されてしまいます。 上記のような複数のコマンドの結果を一度にリダイレクトする方法は無いでしょうか? cat /etc/fstab >> ./test.log cat /etc/inittab >> ./test.log cat /etc/modprobe.conf >> ./test.log と言った方法は避けたいと思います(実際には何10行と言うコマンド結果を出力したいので)

  • 複数のテキストから同じ行数の文字列を抽出し,別のテキストに出力する方法

    環境:linux,Windows XP よろしくお願いします.以下のようなデータが数千個あります. 2020-01-01_00.txt 2020-01-01,00,109.18970,18.36816,30.618,0.000,91.276,292.712 2020-01-01,00,109.54297,18.39178,30.676,0.000,90.044,292.653 2020-01-01,00,109.89642,18.41394,30.581,0.000,89.560,293.056 ・ ・ ・ ・ 2020-01-01_01.txt 2020-01-01,01,109.18970,18.36816,27.998,350.080,85.071,294.773 2020-01-01,01,109.54297,18.39178,28.187,355.642,86.229,294.425 2020-01-01,01,109.89642,18.41394,28.136,359.157,87.494,294.675 ・ ・ ・ ・ 2020-01-01_02.txt 2020-01-01,02,109.18970,18.36816,30.200,551.398,75.640,296.445 2020-01-01,02,109.54297,18.39178,30.356,556.004,79.117,295.921 2020-01-01,02,109.89642,18.41394,29.953,558.076,82.460,295.942 ・ ・ ・ ・ ここで,私がやりたいのは,同じディレクトリ内にある数千個のテキストから同じ行数の文字列を抽出し,別のテキストファイルに出力することです.つまり,結果の出力は以下のようにしたいのです. 109.18970,18.36816.txt 2020-01-01,00,109.18970,18.36816,30.618,0.000,91.276,292.712 2020-01-01,01,109.18970,18.36816,27.998,350.080,85.071,294.773 2020-01-01,02,109.18970,18.36816,30.200,551.398,75.640,296.445 ・ ・ ・ ・ 109.54297,18.39178.txt 2020-01-01,00,109.54297,18.39178,30.676,0.000,90.044,292.653 2020-01-01,01,109.54297,18.39178,28.187,355.642,86.229,294.425 2020-01-01,02,109.54297,18.39178,30.356,556.004,79.117,295.921 ・ ・ ・ ・ 109.89642,18.41394.txt 2020-01-01,00,109.89642,18.41394,30.581,0.000,89.560,293.056 2020-01-01,01,109.89642,18.41394,28.136,359.157,87.494,294.675 2020-01-01,02,109.89642,18.41394,29.953,558.076,82.460,295.942 ・ ・ ・ ・ 私なりに以下のshを作成しましたが,処理が通りません.間違えているところをご指摘いただけないでしょうか.よろしくお願いします. #!/bin/sh BUFIFS=$IFS IFS= exec 3< lonlat.txt while read FL 0<&3 for i in 2020-??-??_??.txt $data = cat $i | grep "$FL" $i print $data >> ./out/$FL done exec 3<&- IFS=$BUFIFS #lonlat.txtの内容は以下の通り 109.18970,18.36816 109.54297,18.39178 109.89642,18.41394     ・     ・     ・ #処理したものを/outに出力

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

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