数学を使用した文字列リストのフィルタリング

数学を使用した文字列リストのフィルタリング

次のファイルがリストされているディレクトリがあります。

abc201303130110.txt
abc201303140511.txt
abc201303150112.txt

ご覧のとおり、ファイル名には日付タイムスタンプが含まれています。201303140000ファイル名に対応する値以上のすべてのファイルを返したいです。

grepを使用してファイル名の日付/時刻部分を取得できますが、X > 201303140000

答え1

awkGNUなら、awk単に以下を使うことができます:

find . -type f | awk '{ match($0, /2013[0-9]+/,arr)}  arr[0] >= 201303140000 '

答え2

Perlが救出に来る! Perlの-nスイッチはやや同様に動作し、sed -nPerlはマッチングと算術の面でより強力です。

dennis@lightning:/tmp/foo$ ls -1
abc201303130110.txt
abc201303140511.txt
abc201303150112.txt
dennis@lightning:/tmp/foo$ ls | perl -ne '$d=$_; $d =~ s/.*?(\d+).*/\1/s; print if $d >= 201303140000'
abc201303140511.txt
abc201303150112.txt

答え3

そしてzsh

print -rl abc<201303140000->.txt

関連情報