我有一个文件,其数据类似于以下内容:
> <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" />
我需要浏览这个文件,查找fileModTime的所有实例,这是一个unix时间戳,并用可读的日期和时间戳替换那里的值。
我知道更改日期的命令。我不知道该怎么做才是实际的文件翻页,提取纪元时间戳并将其传递给我的转换命令。
任何帮助表示感谢。
答案 0 :(得分:2)
这样的事情应该做:
awk '/fileModTime/{
split($0, a, "=")
gsub(/"/, "", a[2])
sub(/[0-9]+/, strftime("%F %T", a[2]), $0)
}1' input.xml
但是,一般来说,逐行处理XML数据并不是一个好主意。您可能最好使用实际的XML解析器。
答案 1 :(得分: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
答案 2 :(得分:0)
perl -MTime::Piece -pe 's/fileModTime="\K\d+/ (localtime $&)->cdate /e' file
如果Wed Jan 16 10:15:04 2013
格式不适合您,请将cdate
替换为strftime("your format here")
如果您对此功能感到满意,请在-i
之前添加-pe
以便就地编辑文件。