0

次のようなデータを含むファイルがあります。

>       <Element     
>       Stream="12"
>       Target_trans="133106"
>       Trans="48467"
>       fileModTime="1358349304"
>       Type="1"
>       EOL="0"
>       user_id="33" />   <Element     
>       Stream="14"
>       Target_trans="133106"
>       Trans="48467"
>       fileModTime="1358539304"
>       Type="1"
>       EOL="0"
>       user_id="33" />   <Element     
>       Stream="11"
>       Target_trans="133113"
>       Trans="48467"
>       fileModTime="1158539204"
>       Type="1"
>       EOL="0"
>       user_id="33" />   <Element     
>       Stream="11"
>       Target_trans="133106"
>       Trans="48467"
>       fileModTime="1358129304"
>       Type="1"
>       EOL="0"
>       user_id="33" />

このファイルを調べて、UNIX タイムスタンプである fileModTime のすべてのインスタンスを見つけ、その値を人間が読める日付とタイムスタンプに置き換える必要があります。

日付を変更するコマンドを知っています。どうすればよいかわからないのは、ファイルを実際に grep して、エポックのタイムスタンプを抽出し、それを変換コマンドに渡すことです。

どんな助けでも感謝します。

4

3 に答える 3

2

このようなことをする必要があります:

awk '/fileModTime/{
  split($0, a, "=")
  gsub(/"/, "", a[2])
  sub(/[0-9]+/, strftime("%F %T", a[2]), $0)
}1' input.xml

ただし、一般に、XML データを 1 行ずつ処理するのは得策ではありません。実際の XML パーサーを使用した方がよい場合があります。

于 2013-05-14T17:27:12.123 に答える
0

次の sed コマンドを使用できます。

sed -i.bak 's/\(fileModTime=\)"\(.*\?\)"/\1"'"$(date -d @\2)"'"/' inFile

編集:

awk を使用する方が優れています。

awk -F'"' '{if ($1 ~ /fileModTime=/) {printf("%s", $1); system("date -d @" $2)}
            else print}' file
于 2013-05-14T15:36:15.337 に答える