• ベストアンサー

ファイルから完全一致、部分一致行を所得する方法

ファイルから指定文言と完全一致した行と、部分一致した行を同時に取得したい場合はどうすれば良いでしょうか? 例: 下記のファイルから「hoge」については完全一致、「tmp」については部分一致の条件で取得したいです。(hoge、tmp、tmps、2tmpが取得したい。) 「grep -e tmp -we hoge」では、完全一致のhogeとtmpしか取得できませんでした。 ファイルの内容 hoge hoges tmp tmps 2tmp ※GNUは導入しておらず、grepのバージョンも少し古いかもしれません。 よろしくお願い致します。

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

  • ベストアンサー
  • kumoz
  • ベストアンサー率64% (120/185)
回答No.2

grep -e tmp -we hoge grep -we tmp -e hoge 上記の2つのどちらも、tmp と hoge のみの出力になるようです。一度 -w を指定すると、すべての検索文字列に -w が適用されてしまうようです。次のようにすれば、一応は望みの出力が得られます。 grep -e 'tmp' -e '\<hoge\>'

daisuki1192
質問者

お礼

回答ありがとうございます。 お礼が遅れて申し訳ありません。 教えていただいた方法で希望する結果を取得することができました。

その他の回答 (1)

  • shiren2
  • ベストアンサー率47% (139/295)
回答No.1

grepは環境の差が大きいのでperlで。 cat FILENAME | perl -ne 'print if /^(hoge|.*tmp.*)$/'

daisuki1192
質問者

お礼

お礼が遅れて申し訳ありません。 ご回答ありがとうございます。 perlを使用するという発想がありませんでした。 勉強になりました。

関連するQ&A

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

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

  • XML::Xpathで部分一致検索をするには

    $xpath->find('/foo/bar/text()="hoge"'); のようにパスと内容から検索は出来るのですが、 完全一致しか取得することができません。 部分一致、もしくは正規表現を用いることは出来るのでしょうか?

  • file_existsでファイル名の部分一致で検索

    PHPの勉強中なのですが、指定フォルダにあるファイルを、部分一致で存在チェックしたいのですが、file_existsでは、正規表現とかは使えないのでしょうか? それとも、readdirでファイル一覧を取得して、そこから検索して存在チェックするのでしょうか?

    • ベストアンサー
    • PHP
  • バッチファイルでテキストファイルの1行目だけ変更

    こんばんは あと少しですばらしい自動化バッチが完成するところなんですが、1点だけできなくて困っているところがあります。 バッチファイルと同じディレクトリにある index.xml の一行目は次のようになっています。 C:\folder\folder\file\hoge.ttxt<?xml version="1.0"?> すべて1行目です。同じ論理行です。 本来、<?xml version="1.0"?>で始まらなければならない xml ファイルが、いろいろな処理の都合上、冒頭にファイルパスが紛れ込んでしまっているのです。前工程の処理は私の手を出せる範囲ではなく、この状態からスタートしなければなりません。 このファイルの1行目から冒頭のファイルパスの部分を削除したいと思っています。 パスは毎回違うので、1行目すべてを「<?xml version="1.0"?>」で置き換える、という動作にすれば確実だと思います。 具体的なやり方を教えてください。 xml ファイルは大きいときで 7MB くらいあります。UTF-8で保存しています。

  • 正規表現での文字列一致の方法

    はじめて、質問を投稿させていただきます。 基準となるURLがあり、リファラーで取得したURLと一致するかどうかを判断するために、正規表現で行おうかと思ったのですが方法が分かりません。 基準URL:http://(www.)*****.co.jp/  1.最後にスラッシュは必ず付いている。  2.必ずしもwwwではない。ない場合もある リファラーURL:http://(www.)****.co.jp/hoge/hoge/index.php?hoge=hoge 要は、「//」と「/」に挟まれた部分が一致しているかを判断したいのですが、正規表現で可能でしょうか? よろしくお願いいたします。

  • java正規表現で複数行を取得し配列にする

    javaの正規表現で、下記のようなテキストファイルから配列を作成しようと思っています。 ---------------- .title1 hoge fuga ..title2 hoge2 fuga2 ---------------- ↓ Array[0] = ".title1 hoge fuga" Array[1] = "..title2 hoge2 fuga2" このようなテキストファイルで、上に示したように行頭が[ . ]の行から、次の行頭が[ . ]の行の直前の行までを配列の一つの要素としたいのですが、どのようにすればいいでしょうか ^\.[\w|\W]+ この表現では、「.title1」からテキストの最後までが一致してしまいます。かといって、 ^\.[\w|\W]+^\. としてしまうと、こんどは「.title2」から始まる部分の取得ができなくなってしまいます。 なにかいい方法はありませんでしょうか。正規表現以外でも構いません。よろしくお願い致します

    • ベストアンサー
    • Java
  • ○行目から□行目だけを表示するコマンド

    テキストファイルの中から、10行目から20行目のみを表示するようなコマンドがあれば教えてください。 CATやMOREのようなコマンドにオプションで行数を指定して指定した行数だけを見ることは可能でしょうか? もしコマンドで一発で無理なら、hoge.txtというファイルの10行目から20行目までを表示するような簡単なシェルの書き方を教えてください。 よろしくお願いします。

  • PHP テキストファイルの一部分を部分一致で

    PHP初心者です。 ホームページ作成で、共通メニューをテキストファイルで作り、require_once で呼び出しているのですが、同じテキストファイルの一部分を、文字列から検索して引っ張ってくるにはどうすれば良いのでしょうか? テキストファイル  <div class="menu_big">1. 東京都</div>  <div class="menu"><a href="xxx.1-1.html">1-1.千代田区</a></div>  <div class="menu"><a href="xxx.1-2.html">1-2.渋谷区</a></div>  <div class="menu"><a href="xxx.1-3.html">1-3.新宿区</a></div>  <div class="menu_big">2. 北海道</div>  <div class="menu"><a href="xxx.2-1.html">2-1.札幌市</a></div> 欲しい結果  '2-1' という文字列を使って、  2-1.札幌市  という文字列と、  <a href="xxx">2-1.札幌市</a>  の文字列の、ふたつが欲しいのです。 ぱんくずリストやタイトル部分での使用を考えています。 テキストファイル内を改行で調整した後にfile()で配列化→行数指定ではできたのですが、文字列の部分一致から結果が欲しいのです。array_searchやpreg_grepなど試してみたのですが、知識不足でうまくいきませんでした…。 どなたか詳しい方、よろしくお願いします。

    • ベストアンサー
    • PHP
  • 指定ディレクトリ名称が先頭から部分一致(全て含まれる)するものを抽出し

    指定ディレクトリ名称が先頭から部分一致(全て含まれる)するものを抽出して、名称が長いほうのディレクトリを削除するシェルスクリプトを作りたいですけど、まったく手をつけない状態です。ヒントでもいいんでアドバイスお願いします。指定ディレクトリ下のディレクトリに対しても再帰的に行い場合は? /tmp/aaaabb /tmp/aaaa /tmp/aaaa/bb /tmp/aaaa/bbdd がある時、下のディレクトリが削除する。 /tmp/aaaabb /tmp/aaaa/bbdd

  • Cシェルでテキストファイルの行削除方法

    現在、Cシェルの勉強をしていますが、ある文言に完全一致した行のみ削除する方法が分かりません。 例として、下記のようなファイルがあり、"AAA"を指定して削除しようとすると、"AAA_1"までも削除されてしまいます。 例)test.txt AAA aaa AAA_1 aaa BBB bbb CCC ccc お手数ですがご教授いただけると幸いです。 以上、宜しくお願い致します。