2009-07-08 17 views
2

私はyyyymmddで終わるファイル名を持つ例:myFile.20090601、myFile20090708など正規表現でこれを構築する方法

私は2009年の7月7日に6月8日から、すべてのファイル内のパターンをgrepしたいですつまり:20090609〜20090707

正規表現を一度に行うにはどうすればよいですか?

私が試した:

grep 'myPattern' *20090(6(09|[1-3][0-9])|70[1-7]) 
+0

なぜこれに対して正規表現を使用したいですか? –

+0

これらのファイルのパターンに対してgrepしたいです。 – Saobi

+1

+1 - これがなぜ落とされたのかわからない - 私は人々が彼らがdownvote時にコメントを残すことを望むので、私たちは彼らがどこから来ているかを理解するために使うことができます –

答えて

4
20090(6(09|[1-3][0-9])|70[1-7])$ 

または

20090(6(0[89]|[1-3][0-9])|70[1-7])$ 

をあなたは8日か7月9日のものかどうかに応じて(あなたの質問が矛盾しているようです)。

+0

実際、私はそれを構築する方法を意味していますので、それらのファイルのパターンをgrepするために使用することができます。私はできるはずです: grep 'myPattern' * 20090(6(09 | [1-3] [0-9])| 70 [1-7])$ しかし、私はこれをします。 – Saobi

+0

ls -1 myFile。* | grep '20090(6(0 [89] | [1-3] [0-9])| 70 [1-7])$' | xargs grep

+0

まだ動作しません。 – Saobi

0

有効な日付の範囲は、6月は06-30、7月は01-07です。日数の範囲が異なるため、毎月別々の正規表現を使用する必要があります。これらは

/2009 06 (09 | [12][0-9] | 30)/x 

(単位場所が依存するために有効であるかについて、さまざまな条件があるので、一日の範囲は十の位に応じて、ケースに分けられている方法に注目してください。)

そして

/2009 07 0[1-7]/x 

し、我々は

/(2009 06 (09 | [12][0-9] | 30)) | (2009 07 0[1-7])/x 

、その後要因にそれらを結合することができます3つのパラメータを取り

/2009 0 (6 (09 | [12][0-9] | 30)) | (7 0[1-7]) $/x 
+0

そして、あなたは手動ですべての日付範囲でこれを行う必要があります... –

1

私はperlの/ Pythonスクリプト(または任意の他のスクリプト言語)をお勧めしたい:共通点(readabiltyための最善ではないかもしれない)と行末のアサーションを追加して:YYYYMMDD

としてYYYYMMDD

  • 終了日など

    1. パターン
    2. 開始日それは希望:

      1. デコード開始日と終了日。フォルダ
      2. デコード内のファイル名
      3. チェックで任意の日付を通じ
      4. ループそれは日付の間だ場合、以下のようにこれは大まかに動作パターンに
  • 2
    grep 'myPattern' `ls | grep -E "20090(6(09|[1-3][0-9])|70[1-7])"` 
    

    をgrepします。現在のディレクトリ(ls)のファイルのリストを取得し、日付正規表現(ls | grep ...)を使用してそれをフィルタリングし、生成されたファイルリスト(grep 'myPattern' ...)でパターンを使用してgrep検索を実行します。 ls | grep ...を囲むバックティックは、コマンドのその部分を実行し、そのコマンドの出力を周囲のコマンドに置き換えます。したがって、 "file1 file2 file3"のような出力が生成された場合は、grep 'myPattern' file1 file2 file3のようなコマンドになります。

    +0

    "into"を変更する必要があります。そうでなければ、シェルに応じて、ワイルドカードが展開される可能性があります。 –

    +0

    私はそこにアスタリスクgrep -Eパラメータ。 – Svante

    関連する問題