规则

规则是一个操作小寄存器的小程序。寄存器是存储在文件中的记录,即与关系数据库.

寄存器表示为哈斯克尔类型的值[[字符串]]以文本形式表单。此列表中的第一个元素确定文件中记录的字段。例子:

[[“名称”,“扩展名”],[“Thomas Hallgren”,“5422”],[“Magnus Carlsson”,“1058”],[“Ana Bove”,“1020”]]
所有记录应具有相同数量的字段。

简介

规则位置 输出格式 操作1...操作n个 输入_格式
操作从右向左执行,就像功能一样Haskell中的应用程序和函数组合。这个输入_格式这是第一次手术吗,确定输入的格式,以及输出格式是最后一个操作,它决定输出的格式。由于所有操作都有已知数量的参数,不需要分隔符或其他分隔符一个操作接一个操作。

没有任何论据,规则可以自然地将输入传递给输出没有改变,但因为这是毫无意义的,规则而是输出用法消息。

注册位置

位置含义
 如果没有给出位置,则从标准输入中获取输入并且输出被写入标准输出
文件 路径 规则在给定的路径。为了防止数据丢失,将写入结果到一个临时文件,该文件被重命名以替换位于的文件路径。因此需要在目录中具有写入权限注册表所在位置、权限和所有权注册文件可能会更改,链接可能会断开。可能是这样同样明智的做法是限制输入和输出格式转换的使用,以保持输出与输入的格式相同。

输入/输出格式

规则支持多种双向格式转换:
输入输出含义
  如果没有给定输入或输出格式,则使用寄存器文件格式。
自放映 显示 一种人类可读的文本格式。请参见示例如下所示。
来自csv 脑脊液病毒 使用CSV公司格式(逗号分隔的值,副本请求4180),其中字段用逗号分隔。字段可以包含在双引号,在这种情况下可以包含逗号。(目前不支持CSV格式的其他功能。)假设第一行包含字段的名称。
来自-ssv 固态真空 的变体来自csv/脑脊液病毒其中值之间用分号而不是逗号分隔。
从passwd 密码 使用UNIX密码文件格式,即,每条记录一行:分隔字段。对于输入,如果第一行以开头#这是假定的包含字段的名称,用:.对于输出,以开头的行#后跟的是字段始终包含在内。
来自选项卡 带标签的 使用tab分隔的值格式,即每行一条记录,字段值由制表符分隔。对于输入,如果第一行上的字段都包含在方括号中,假定它们是字段的名称。对于输出,第一行始终是方括号中的字段名。
自缩写0 选项卡0 的变体自带标签/带标签的不需要场地名称用方括号括起来。第一行总是字段名,不带方括号。
来自url 网址 格式为1url编码查询每行。url编码查询是web使用的格式向web服务器提交表单内容时使用浏览器。
来自-json 杰森 格式是一个包含大量记录的JSON数组。

仅输入格式

除了上述输入/输出格式外,规则也可以按以下格式读取输入:
格式含义
来自邮箱 假设输入位于UNIX邮箱格式,哪个是邮件消息的序列,其中每条消息的开头是由以“发件人”。生成的寄存器将具有以下字段:发件人,收件人,日期,主题,消息Id,标题,文件位置车身.五个第一个字段包含相应邮件标题的值,这个标题字段包含剩余的值标题文件位置字段包含输入文件中的消息和车身字段包含邮件的正文。
来自-clf 假设输入位于通用日志格式,组合日志格式,由一些web服务器使用。

仅输出格式

除了上述输入/输出格式外,规则也可以以以下格式生成输出:
格式含义
html格式 生成一个HTML表。假定字段包含纯文本,因此,对HTML中具有特殊含义的字符进行转义。
html0型 生成HTML表。假设字段包含HTML,和按原样输出。
柔性制造技术 格式 根据格式化字符串格式化输出(见下文)。

格式化字符串

用于的格式化字符串柔性制造技术命令工作方式与C函数中使用的格式化字符串基本相同打印斯特夫蒂姆.大多数字符代表他们自己,除了%字符,用于开始格式化命令。

格式含义
%% 百分比字符。
%/ 换行符。
%0领域 命名记录的内容领域照原样。
%"领域 命名记录的内容领域双层包装引用。双引号和换行符转义为\"\n个分别是。
%'领域 命名记录的内容领域单包装引用。单引号和换行符转义为\'\n个分别是。
%#领域 命名记录内容的行数领域.
%领域 命名记录的内容领域.对HTML中具有特殊含义的字符进行转义,即:,&被替换为&amp;<被替换为&它;.
%{领域-柔性制造技术} 这将使用命名的领域作为URL和格式化字符串柔性制造技术作为链接文本。如果URL领域为空(或仅包含空格),输出链接文本时,不会将其转换为链接。链接不能嵌套,并且柔性制造技术不能包含}.
%{领域=柔性制造技术} 如上所述,但如果链接字段为为空。

操作

在下表中,领域表示以逗号分隔的列表字段名,例如姓名、电话.

操作含义
添加 url编码查询 将新记录添加到寄存器
更新 哪里 什么 更新与url-encoded-query匹配的记录哪里具有url-encoded-query中给定的值什么.
挑选 领域 投影。从记录中选择命名字段。的顺序字段没有更改。
领域 投影。从记录中删除命名字段。
安排 领域 重新排列记录的字段。这可以更改字段,删除一些字段,复制字段并引入新字段。
格雷普 一串 选择。选择具有一串作为子字符串某个领域。比较不区分大小写。
grep-in公司 领域 一串 选择。选择具有一串作为子字符串其中一些提到的领域.比较不区分大小写。
urlgrep公司 url编码查询 选择。选择字段包含子字符串的记录中给定的字符串url编码查询.查询中未提及的字段可以包含任何内容。比较不区分大小写。
urlgrep-v url编码查询 选择。选择字段不完全匹配的记录url编码查询。中未提及的字段查询可以包含任何内容。
URL匹配 url编码查询
urlmatch-v url编码查询
选择。选择字段与url编码查询,可以包含?*通配符。中未提及的字段查询可以包含任何内容。urlmatch-v选择记录那不匹配。
节点 删除重复记录。
nub依据 领域 删除重复记录。仅使用给定的领域确定两个记录是否相等。
分类 对记录进行排序。字段按字典顺序从从左到右。
排序依据 领域 对记录进行排序。给定的领域按照给定的顺序进行词典比较。
按n排序 领域 将记录排序为排序依据,除了第一个领域进行了数值比较。
颠倒 颠倒记录的顺序。
线 领域 如果领域不止一行long,将记录拆分为多个记录,每个记录一行。
无线条 领域 与…相反线,即连续记录除以下内容外均相同领域、合并。
分组依据 领域 类似无线条:连续记录,其中相应的领域同意被合并。
聚合 fn公司 领域 应用聚合函数fn公司到给定的领域.这在以下情况下作为后处理步骤很有用分组依据.支持的聚合函数:计数,最大值,最小值,节点,产品总和。数字聚合函数可以理解带有单位后缀的数字,例如。53平方米.只有当所有数字都具有相同的单位时,才会应用聚合。
凹面(concat) 领域 合并给定的领域通过将每个记录中给定字段的内容。的名称新字段是领域.
分裂 领域 拆分领域进入几个领域。字段的内容在换行符上拆分。因此字段数为由字段中的最大行数决定。的名称通过将数字附加到领域.
一串 如果一串不是可识别的操作之一规则,解释为格雷普 一串,也就是说,当您搜索时,可以省略这个词格雷普在大多数情况下。

示例

对于以下示例,我们假设文件包含介绍中显示的寄存器。

命令输出
注册节目<人
姓名····托马斯·哈格伦分机5422姓名····马格努斯·卡尔松分机1058姓名····Ana Bove分机1020
注册表格式“%Name;%”扩展;%/'<
托马斯·哈格伦5422马格努斯·卡尔森1058Ana Bove安娜·博夫1020
Reg显示grep magnus<人
姓名····马格努斯·卡尔松扩展1058
注册文件人员更新“Name=Thomas*”扩展名=5555
注册节目thomas<people
姓名。。。。。托马斯·哈格伦
分机5555

实施

规则在Haskell中实现。源是555行long(2001-05-20),其中383行是专门为规则和172行代码被其他程序重用图书馆。它还使用Haskell前奏和标准库,此处不计算。

过去、现在和未来

规则随着时间的推移而不断发展,在各个方面仍有待改进方式。
  • 分组依据聚集蛋白于2021年9月添加。
  • 在上添加了向寄存器添加新记录的操作2007-02-04.
  • 可能需要一个操作来将新字段添加到注册(以比使用更容易的方式安排).
  • 除此之外挑选效率略高于安排,没有理由有两个如此相似的操作。
  • 可能存在组合两个或多个寄存器的操作以各种方式,例如并集、交集和联接。目前,有两个独立的程序,注册加入RegCat公司,用于分别连接和级联寄存器。
  • 最初在上添加了从替代输入格式的转换2001-05-20,支持的格式列表已扩展到时间,但是规则可以支持更多的输入格式。

另请参见

作者

托马斯·哈格伦