使用基于规则的列表处理完成任务

汤姆·贝克...

Image for article titled Getting things done with rule-based list processing

汤姆·贝克

Open digg.com

编辑:文本文件和命令行纯粹主义者汤姆·贝克(Tom Baker)在看到Lifehacker的todo.txt脚本后联系了我们,他说自己开发了一个名为shawkle的文本列表管理器。今天,Baker很友好地解释了他如何使用shawkle在TXT中管理他的个人信息。Shawkle是一个聪明的命令行高手,在极客里克特级别上表现得很好,但对于纯文本文件爱好者来说,它是一个非常有用和灵活的工具。

早在1993年,我就使用Unix editor vi将个人信息保存在一些纯文本文件中。我经常需要打开几个文件才能输入重叠的信息位,例如,对项目的引用(todo.txt),与该项目相关的人的电话号码(phone.txt),以及与此人的预定约会(calendar.txt)。约会结束后,我不得不打开另一个文件,将引用从calendar.txt移到log.txt。

即使使用vi,在文件之间切换也很乏味,因此我编写了一个小脚本,自动将包含关键字PHONE的任何行移动到PHONE.txt,将包含NOW的任何行移动到todo.txt,等等。当我看到关键字可以使用规则与文件关联,并且这些规则可以拆分成单独的文件时,我编写了一个名为shuffle(现在是shawkle)的脚本。

shuffle获取了一个满是TXT格式列表的目录,将它们的内容转储到一个大文件中,删除了原始文件(备份后!),并根据规则文件生成一组新的列表。shuffle在UnixWorld的专栏中发表后不久,我将其基于grep的中心函数替换为基于awk的稍微复杂的函数,并将脚本重命名为shawkle。肖克尔已经可靠地担任我的名单组织者超过12年了。

基于规则的列表处理

“基于规则的列表处理”背后的思想是,使用基于正则表达式的规则管理列表,这些规则控制纯文本文件的内容和排序顺序。这是一种“惰性信息管理”,因为它需要松散的结构输入,并提供让信息“就位”的方法。信息行可以按任何顺序输入到任何(任意命名)文本文件中,并用关键字标记,规则将确保这些行最终位于指定的文件中,按指定顺序排序。编辑列表,调整规则,运行shawkle,生成新列表,按订单**。

要求和下载

shawkle是一个命令行工具,可以在Unix命令行或仿真器(如Windows上的Cygwin)上运行。从这里下载shawkle,chmod 755以使其可执行,并按照下面的示例开始。

肖克尔在行动

让我们从两个文件开始:

  • foobar.txt, an unsorted list of appointments, tasks, and reference information:

    NOW Make reservati*** at Hotel Beckmann, 0551-209080, for Jan 06 Jan 06 Sat 1900 Dinner with GeorgePHONE Hotel Beckmann, Ulridehuser 44, 0551-209080Jan 31 Wed 1100 WG teleconLATER Clean garageFeb 02 Fri 0900 WG meetingLATER Search http://zweitausendeins.de/ for Szell recordingPHONE POSTAGE Kompaktbrief bis 50 gramm 1.12 EURONOW Write paragraph about SWD

    Download a copy of foobar.txt to use with this example.

    .rules, a "hidden" rule file:

    0|.|$Allfiles|default.txt|sort -bdf0|^B |default.txt|done.txt|1|^NOW|default.txt|todo.txt|1|^LATER|default.txt|todo.txt|#1|^PHONE|default.txt|phone.txt|#1|^Jan$|default.txt|calendar.txt|#1|^Feb$|default.txt|calendar.txt|sort +0M -1 +1n -2

    Download a copy of .rules.

当应用于目录(shawkle*.txt)中的所有文本文件时,脚本将验证每个源文件是否由无空行的纯文本组成,将每个源文件的副本移动到“隐藏”目录.backup,并将源文件的内容聚合到一个大的临时目标文件(合并的.data)中。此时将处理规则。按规则采取:

  • 至少包含一个字符的行(即所有行!)从源文件combined.data移动到目标文件default.txt中,然后按字母顺序排序。
  • 以“B”开头的行(a B后跟空格)从default.txt移到done.txt。
  • 以“NOW”开头的行从default.txt移到todo.txt。
  • 以“LATER”开头的行也会从default.txt移到todo.txt。

注意,在这个例子中,最后三条规则是用散列符号“注释掉”的。如果“未注释”,则表示:

  • 以“Jan”开头的行从default.txt移到calendar.txt。
  • 以“Feb”开头的行也从default.txt移到calendar.txt,然后按月份和日期排序。
  • 以“PHONE”开头的行从default.txt移动到PHONE.txt。

运行shawkle后,有两个新的文本文件(代替foobar.txt):

  • default.txt:

    Feb 02 Fri 0900 WG meetingJan 06 Sat 1900 Dinner with GeorgeJan 31 Wed 1100 WG teleconPHONE Hotel Beckmann, Ulridehuser 44, 0551-209080PHONE POSTAGE Kompaktbrief bis 50 gramm 1.12 EURO

    todo.txt:

    NOW Make reservati*** at Hotel Beckmann, 0551-209080, for Jan 06NOW Write paragraph about SWDLATER Clean garageLATER Search http://zweitausendeins.de/ for Szell recording

调整示例

现在让我们编辑file.rules,通过删除散列符号“取消注释”最后三条规则。接下来,让我们编辑default.txt,使其其中一行与不同的规则匹配:将日期字符串“jan06”更改为“b2006-01-06”。再次运行脚本(shawkle*.txt)。现在有四个文件:

  • calendar.txt, sorted by month and day:

    Jan 31 Wed 1100 WG teleconFeb 02 Fri 0900 WG meeting

    phone.txt, sorted alphabetically:

    PHONE Hotel Beckmann, Ulridehuser 44, 0551-209080PHONE POSTAGE Kompaktbrief bis 50 gramm 1.12 EURO

    todo.txt, with NOW lines (sorted alphabetically) grouped before the LATER lines (also sorted alphabetically):

    NOW Make reservati*** at Hotel Beckmann, 0551-209080, for Jan 06NOW Write paragraph about SWDLATER Clean garageLATER Search http://zweitausendeins.de/ for Szell recording

    done.txt, an activity log, sorted by date:

    B 2006-01-06 Sat 1900 Dinner with George

我如何使用shawkle

我总是把当前待办事项列表的折叠打印件放在口袋里。这些表格充当电话号码、URL和随机想法的收集桶。远离我的电脑——在火车上,排队,喝着咖啡——打印出来的文件提供了一个空间,可以进行头脑风暴,设定优先级,将模糊的想法转化为下一步行动,最重要的是,可以把事情划掉。床单上写满了箭头和涂鸦。回到电脑前,我在键盘上输入添加和更正,调整.rules以更改关键字的顺序或将其分组到文件中,再次运行shawkle,打印新版本,然后循环重新开始。

列表和规则会随着时间的推移而共同演变。它们反映了我不断变化的项目和优先事项。我的会议准备清单变成了一份写文章清单,然后变成了一份休假清单。规则是一个不断发展的关键词词汇表;不需要其他文档,因为它记录了自己。

在连续使用这个脚本12年之后,我收集了大量已完成的动作、电子邮件地址、电话号码、阅读摘录和带时间戳的会议笔记,我使用基于grep的简单shell脚本查询这些内容。每次运行shawkle时,另一个shell脚本都会将最新列表镜像到HTML文件,使任何URI和本地文件名(如mbox格式的邮件文件夹)都可以在浏览器中单击。文件todo.html用作我的默认主页。

大卫·艾伦建议选择一个能激发玩家兴趣的列表组织者。.rules的可编辑性使得在多个轴上标记数据变得很容易——优先级(今天、不久、将来某一天)、大项目(DCMI、KIM、SWD)、小项目(晚餐)、孵化器(NEWIDEA)、上下文(通话)、提醒(预期)、参考(电话、链接)或事件(YYYY-MM-DD、Mmm-DD)。没有“一个最好的方法”可以做到这一点。迭代编辑数据、调整规则并生成不同的视图是一种思维方式。

使用普通编辑器对纯文本列表进行基于规则的处理,可以绕过花哨的界面,让用户直接接触数据。纯文本控制台的长列编辑限制已被80取代。如今,在中等字体的文本窗口或横向打印输出中,120行甚至130列宽的行都可读性很好。宽度的限制激发了某种简洁感,甚至是诗歌。

关于肖克尔

shawkle(作为其前身shuffle)是使用MKS Toolkit开发的,MKS Toolkit是Cygwin之前的Unix shell仿真器,运行在DOS3.3上。脚本中的一些命令,例如print-u2,是特定于kornshell的。该脚本与现在广泛使用的公共域KornShell(pdksh)配合使用效果良好。一些建议:

  • 在运行shawkle之前,保存文本文件并退出编辑器。
  • 如果健全性检查导致shawkle在完成将数据聚合到一个文件之前退出,则文件combined.data将保存已处理到该点的任何文件的内容(为了让自己放心,请将combined.data的大小与.backup.)中文件的大小进行比较。要恢复正常,请修复错误消息中描述的问题,将combined.data重命名为somethingelse.txt,然后重新运行shawkle。
  • 不要对同一数据同时运行shawkle两次。
  • 不要在规则文件中使用不存在的排序选项(例如,sort-e);数据可能会丢失。如果数据丢失,shawkle会通知您。只需修复违规规则,从.backup恢复原始文件,然后重新运行shawkle。
  • 请注意,Unix程序/bin/file有时可能会将文本文件解释为“text”以外的内容,从而导致shawkle退出并显示错误消息。如果发生这种情况,则使用B/BI/file测试违规文件,可能使用替代的MAGICfile,并考虑更改导致该问题的文本文件中的关键字或标点。

1994年的UnixWorld专栏提供了关于脚本的更多细节。一位评论员发现,使用agrep,可以修改shuffle来处理多行文本,如mbox邮件文件夹和Usenet新闻文章。

为清楚起见,本文中介绍的脚本比我实际使用的脚本稍微简单一些,它会在目录之间自动移动指定的文件。包含已完成操作的行(如2006-11-06.1230.done.txt)将被推送到一个存档目录,并带有自己的本地.rules文件,以便合并到log.txt中。请注意,基于awk的正则表达式可以匹配一行中任何以空格分隔的数字字段,并且规则树可以有多个分支。

参考资料

“Shuffle:一种基于规则的列表处理器”,载于:Rebecca Thomas,“数据Shuffle”[每月专栏“Wizard’s Grabbag”],UnixWorld开放计算11(6),第123-127页。截至2006年11月,本文内容可在http://web.bilkent.edu.tr/Online/uworld/archives/94/grabbag/06.txt.html.

汤姆·贝克(Tom Baker)帮助开发了都柏林核心元数据计划(Dublin Core Metadata Initiative),他现在是该计划的共同负责人。在德国Go亭亭州立大学图书馆的**研究员Baker主持了W3C语义网部署工作组,并开始了一项新的德语元数据活动基姆。他住在柏林。

  • 发表于 2021-08-01 16:13
  • 阅读 ( 195 )
  • 分类:互联网

你可能感兴趣的文章

如何在没有待办事项清单的情况下提高工作效率

...们后腿吗?许多生产力很高的人说是的。他们对如何在不使用待办事项清单的情况下提高工作效率有一些有趣的想法。 ...

  • 发布于 2021-03-11 14:35
  • 阅读 ( 277 )

基于项目符号的最佳待办事项列表应用程序

...Office 365集成。为办公室或家里创建一个项目符号列表,使用丰富多彩的主题对其进行个性化设置,并使用提醒添加截止日期。 ...

  • 发布于 2021-03-11 17:41
  • 阅读 ( 315 )

为什么ticktick是android最好的待办应用

...的底部是向当前列表添加新任务的位置,如果愿意,可以使用语音命令添加新任务。总的来说,TickTick布局巧妙,在空白、颜色、导航性和信息访问之间达到了完美的平衡。没有什么比两个或三个水龙头更近的了。 ...

  • 发布于 2021-03-12 17:46
  • 阅读 ( 280 )

待办事项太多?尝试这些应用程序来停止不知所措

没有完美的待办事项列表应用程序。事实上,你使用的大多数应用程序在一段时间后都显得势不可挡。随着时间的推移,这些任务似乎无法完成。很可能你使用的应用程序不对。 ...

  • 发布于 2021-03-13 02:54
  • 阅读 ( 173 )

5款基于经典生产力原则的新生产力应用程序

... 您可以不用注册就使用它,但是登录会保存您的列表供以后使用。另外,它允许您创建多个列表,可以随时激活。 ...

  • 发布于 2021-03-13 07:54
  • 阅读 ( 251 )

用5条已被证实的大脑规则停止拖延

...如,你能把它打碎吗?)根据需要。 通过使用智能**上的应用程序开始正念冥想练习来调整你的压力反应。研究表明,正念可以改变你的大脑回路,从而提高你在紧张情况下保持冷静(和有效)的能力。 ...

  • 发布于 2021-03-14 09:28
  • 阅读 ( 223 )

如何通过chrome扩展将gmail变成待办事项列表和日历

...将你的电子邮件或待办事项连接到你的日历上,那么只需使用Gmail即可。Google Chrome的这个扩展将通过完全链接的工具提高您的生产力。你可以节省时间,完成事情,永远不会忘记一个方便的附加组件的重要事件。 ...

  • 发布于 2021-03-14 10:55
  • 阅读 ( 232 )

用这个神奇的机器人自动完成trello上繁琐的任务

...的管家就是答案。这个新的机器人让你自动化Trello任务。使用触发器和操作,您可以自动创建列表、移动卡片、设置到期日期、添加标签等等,而无需举手。 ...

  • 发布于 2021-03-14 13:44
  • 阅读 ( 193 )

5种你可能没听说过的新的生产技术

... 如果您使用基于列表的任务管理器(如Trello),那么就更容易了。 ...

  • 发布于 2021-03-15 10:28
  • 阅读 ( 194 )

使用条件格式自动格式化excel电子表格中的数据

...及与工作相关的情况下派上用场。但是,如果你从来没有使用过它,它也会让你不知所措。 ...

  • 发布于 2021-03-17 03:17
  • 阅读 ( 305 )