我确信这对大师来说很容易。我正在努力完成我的工作和todo系统。 目前我只是得到了一个markdown文件,我在VI中编辑并根据我要做的事情设置标签。
看起来像这样
# My project | @home
- Do this this | @home
我想在我的设备上同步这个文件,并在android上使用tasker / grep根据我的位置向我展示todo。
我现在已经到了我想要添加要做的事情的舞台,所以我想的是像
- Do this thing in the future | @home @2014-02-01
如何在日期为2014-02-01之前排除该行? 我目前只提取@home todos的命令是
grep -e "@home" myfile | cut -d '|' -f1
我确信有一种方法可以做到这一点,但谷歌/ stackoverflow还没有引导我正确的方向!
帮助表示赞赏,
由于
艾伦
答案 0 :(得分:3)
使用Perl
perl -MTime::Piece -ne '
BEGIN {$now = localtime}
print unless /@(\d{4}-\d\d-\d\d)/ and $now < Time::Piece->strptime($1, "%Y-%m-%d")
' <<END
# My project | @home
- Do this this | @home
- Do this thing in the future | @home @2014-02-01
END
# My project | @home
- Do this this | @home
另外,GNU awk
gawk '
BEGIN {now = systime()}
match($0,/@([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])/, m) {
time = mktime(m[1] " " m[2] " " m[3] " 0 0 0")
if (time > now) next
}
1
'
答案 1 :(得分:1)
使用awk:
DAT=$(date +%Y%m%d) # get today's date, for example 20140117
awk 'NF>3{gsub(/-/,"",$NF);if ($NF>d) next}{print $1}' FS="[|@]" d=$DAT file
# My project
- Do this this
答案 2 :(得分:1)
对于使用日期顺序与词法顺序相同的格式的日期的文件,如nginx error log
,您可以使用awk在特定日期之后找到这些行:
awk -v "oneHourAgo=$(date +'%Y/%m/%d %H:%M:%S' -d '1 hour ago')" '/^[0-9]{4}\/[0-9]{2}\/[0-9]{2}/{ if ($0 >= oneHourAgo) print $0 }' /var/log/nginx/error.log
错误日志可能包含不以日期开头的多行错误,因此会过滤掉这些错误。