- 締切済み
grepの使用方法について
下記のようなデータから2009/08/22以降のデータをgrepしたいというようなことは可能なのでしょうか? 2009/08/21 20:00 2009/08/21 21:00 2009/08/21 22:00 2009/08/21 23:00 2009/08/22 00:00 ←これ以降の日付のデータを取得したい 2009/08/22 01:00 2009/08/22 02:00
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- Tacosan
- ベストアンサー率23% (3656/15482)
「可能だけどやりたくない」に 1票. 理論上は ^(1[0-9][0-9][0-9][0-9][0-9]* |3[0-9][0-9][0-9] |2[1-9][0-9][0-9] |20[1-9][0-9] |2009/1[012]|2009/09|2009/08/3[01]|2009/08/2[2-9]) にマッチさせればいいのかもしれんけど, これはさすがにバカだと思う. 順番になっているなら sed でいいし, そうでなくても awk なり Perl なりを使った方がらく.
- sakusaker7
- ベストアンサー率62% (800/1280)
可能か?という質問については、多分可能です。 が、だからといってしちめんどくさいぱたーんを作ってやるべきではありません。 別の質問で、awkでやろうとしたけどうまくいかなかったというのが ありましたけど、具体的にどのようなスクリプトを書いてうまくいかなかったのでしょうか? それと確かsedで、指定日以降入力の末尾までという回答をされた方も いらしてましたが、そのような方法ではなにか不満な点があるのですか? ついで。 >grep "2009\/08\/22" "ファイル名" > "出力ファイル名" スラッシュは正規表現ではメタ文字でも何でもありませんから、 バックスラッシュを前置するのは無意味(場合によっては害)です。 awkでは正規表現を囲むのはスラッシュ固定なのでどうしようもありませんが sed(やPerlなど)では別のキャラクターに変更可能です。
2009/08/23日以降の日付があるのなら grepでは無理です awkとか windowsならVBAでもいいし
- bakeratta
- ベストアンサー率24% (317/1288)
まず、これ(↓)ってテキストデータの中身ですか? 2009/08/21 20:00 2009/08/21 21:00 2009/08/21 22:00 2009/08/21 23:00 2009/08/22 00:00 2009/08/22 01:00 2009/08/22 02:00 grep "2009\/08\/22" "ファイル名" > "出力ファイル名" ってやれば、2009/08/22って文字列のある行を抜き出すことは出来ると思いますが・・・。 (もしかしたら、検索文字とファイル名が前後逆かも・・・(汗)) これだと、2009/08/23以降は抽出できないですね。(^-^;; なんなら、viだとかreとかのエディタで編集した方が早いかも・・・。 ファイル数が多いなら、sedなどでbatを組んではどうでしょうか? (しばらく使ってないので、実際のやり方を教えることは無理ですけど(苦笑)) <補足> \は、Linux(UNIX)上ではバックスラッシュです。 単純に"/"だけだとLinux(UNIX)上では予約文字(?)なので、バックスラッシュでキャンセルしているって意味ですね。