Mar*_*tko 3 linux zsh oh-my-zsh
我正在尝试格式化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
非常感谢任何反馈!
fc -li | grep $(date -I)
Run Code Online (Sandbox Code Playgroud)
该选项-i指示fc以ISO 8601 yyyy-mm-dd HH:MM格式打印时间戳。该-I选项指示日期以ISO 8601格式输出日期(无时间)。
由于fc是一个内置的zsh,你可以找到它在文档zshbuiltin手册页。
选项-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'
Run Code Online (Sandbox Code Playgroud)
这使用strftime功能(带有的更多信息man 3 strftime)格式化时间戳。因此,格式选项与您可以使用的格式选项几乎相同date。
您可以date使用该-标志告诉不要填充字段。例如6/22/16:
date +%-m/%-d/%y
Run Code Online (Sandbox Code Playgroud)
此标志也适用于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)
Run Code Online (Sandbox Code Playgroud)