我正在尝试格式化oh-my-zsh历史输出。
似乎fc
是可行的方法,因为history
会忽略HISTFILE
,HISTSIZE
或HISTTIMEFORMAT
有没有办法像我date
我无法在线找到有关fc
命令的任何适当文档。还没有关于fc
的手册页。
使用某种欧洲格式输出历史记录的工作是fc -flE
。
最后,我想要做的是找出我今天和何时输入的命令数。
那里有一点问题。
目前我有这样的设置:
alias today='date +"%d.%m.%Y"'
没有格式标记可以让我删除前导零(我想要6而不是06)
但是我在这里有比使用奇怪的zsh history命令fc更多的格式选项。
历史记录输出日期为22.6.2016,today
为22.06.2016
因此,我不能这样做:
fc -flE | grep $(today) | wc -l
非常感谢任何反馈!
答案 0 :(得分:5)
fc -li | grep $(date -I)
选项-i
指示fc
以ISO 8601 yyyy-mm-dd HH:MM
格式打印时间戳。 -I
选项指示日期以ISO 8601格式输出日期(没有时间)。
由于fc
是zsh
的内置版,您可以在zshbuiltin
manpage中找到其文档。
选项-f
(以美国MM/DD/YY hh:mm
格式打印时间戳)和-E
(欧洲dd.mm.yyyy hh:mm
格式的打印时间戳)是互斥的, -E
优先(默默地,没有错误消息)。如果您不想要欧洲格式,请删除-E
选项。
您可以使用选项fc
明确指定-t fmt
的时间戳格式。以下将打印时间戳,如06/22/2016 - 23:07:09
(注意零填充):
fc -lt '%m/%d/%Y - %H:%M:%S'
这使用strftime
函数(man 3 strftime
的更多信息)来格式化时间戳。因此,格式选项几乎与您可以使用date
。
您可以告诉date
不要使用-
标记填充字段。例如6/22/16
:
date +%-m/%-d/%y
此标志也适用于fc
。
如果您更喜欢其他时间戳格式而不是ISO 8601,则可以指定一个用于date
和fc
的格式。例如:非填充的美国日期格式和带有秒的0填充时钟时间:
TS_DATE="%-m/%-d/%y"
TS_TIME="%H:%M:%S"
fc -lt "$TS_DATE $TS_TIME" | grep $(date +$TS_DATE)