1

たとえば、時間の strftime 形式と(%Y-%m-%d %H:%M:%S)、この種のデータを含むファイルがあります(2012-02-11 17:15:00)。指定されたパターンが実際にデータと一致するかどうかを確認する必要があります。これにアプローチする方法は?ああ、デート?

編集: 詳細情報: ユーザーは strftime 形式を入力します。たとえば、入力時としましょう。次に、それらの日付を含むファイルを入力します。それらのデータが有効であることを確認する必要があります (彼は間違いを犯していません)。したがって、入力ファイルの行をチェックして、指定されたパターンに一致するデータがあるかどうかを確認する必要があります。例:

  • ユーザーは strftime 形式を入力します。(%Y-%m-%d %H:%M:%S)

    入力ファイル:(2012-02-11 17:15:00) long sentence

    有効

  • ユーザーは strftime 形式を入力します。Date[%Y.%m.%d %H:%M:%S]

    入力ファイル:Date-2012.02.11 17:15:00- long sentence

    無効

4

3 に答える 3

1

外部ヘルパー バイナリを許可する場合は、dateutilsを作成して、日付と時刻のデータをバッチ処理します。

dconv -q -i '(%Y-%m-%d %H:%M:%S)' <<EOF
not a match: 2012-04-10 12:00:00
a match: (2012-04-10 13:00:00)
EOF

あげる

2012-04-10T13:00:00

-iは入力形式で、-q警告を抑制します。dconv入力行を出力行に変換しようとします (この場合、一致する行を ISO 標準形式に変換します。

したがって、これを使用すると、入力行数が出力行数と等しい場合、ファイルは完全に一致します。

于 2012-04-10T09:33:23.100 に答える
0

私はこれに対して強引なアプローチを取ります:%X指定子を対応する正規表現に置き換えてから、結果として生成された正規表現と一致しない行を除外できます:

user_format="%Y-%m-%d"
awk -v fmt_string="$user_format" '
  BEGIN {
    gsub(/[][(){}?|*+.]/ "\\&", fmt_string)  # protect any regex-special chars
    gsub(/%Y/, "([0-9]{4})", fmt_string)
    gsub(/%m/, "(0[1-9]|1[012])", fmt_string)
    gsub(/%d/, "(0[1-9]|[12][0-9]|3[01])", fmt_string)
    # and so on
  }
  $0 !~ "^" fmt_string {print "line " NR " does not match: " $0}
' filename
于 2012-04-10T11:05:16.513 に答える
0

現在の日時を確認したい場合:

echo "(2012-02-11 17:15:00)" | grep "$(date "+%Y-%m-%d %H:%M:%S")"

他に GNU 日付が必要な場合 (-d オプション)。これは私のために働く:

echo "(2012-02-11 17:15:00)" | 
grep "$(date -d "2012-02-11 17:15:00"  "+%Y-%m-%d %H:%M:%S")"
于 2012-04-10T09:04:22.873 に答える