在包含类似行的文本文件中
%12/29/2012%
我该如何处理它,以便它们包括星期几?
%12/29/2012 sat%
能sed
做到吗?也许使用sed
and的组合date
?
请注意,并非所有行都是这样的日期,日期是标记。
cat file | while read a; do date --date=$(echo "$a" | tr -d '%') +"%x %a"; done
然后使用下一个命令添加百分号:
$ sed 's/.*/%&%/' file
编辑:
如果要跳过不是日期的行,则必须添加 if-else 语句,例如:
$ cat file | while read a; do if [[ $a == %*% ]]; then date --date=$(echo "$a" | tr -d '%') +"%x %a"; else echo "$a"; fi; done
如果你有GNU awk
,你可以尝试:
awk '(x = mktime(gensub(/%(..)\/(..)\/(....)%/, "\\3 \\1 \\2 0 0 0", ""))) != -1 { print strftime("%%%m/%d/%Y %a%%", x); next }1' file
测试:
内容file
:
%12/29/2012%
wtf
%12/30/2012%
结果:
%12/29/2012 Sat%
wtf
%12/30/2012 Sun%
perl -MPOSIX -pe 's{%(\d{2})/(\d{2})/(\d{4})%}{strftime "%%%m/%d/%Y %a%%",0,0,0,$2,$1-1,$3-1900}ge' file