如何在 GNU Recutils 中获取匹配的表达式?

如何在 GNU Recutils 中获取匹配的表达式?

在 GNU Recutils 中手动的,据记载

返回最长的可能匹配;这适用于整个正则表达式以及(受此约束)组内的子表达式。

但是,当我运行以下命令时(在 macOS 上,通过自制程序安装了 recutils)

echo "Author: Knuth, Donald E." | recfmt "{{Author ~ '^([^,]+).*'}}"

1结果我得到了布尔值。

我认为正则表达式是正确的,因为以下命令正确返回Knuth

echo "Knuth, Donald E." | sed  -E "s/^([^,]+).*/\1/"

是我误解了手册还是这是一个错误?如果是这样,除了布尔值之外,还有其他方法来获取匹配吗?

更新。我在 Debian 虚拟机上也遇到了同样的情况。

答案1

~运算符是比较运算符:它回答问题“左侧的字符串是否与右侧的表达式匹配?”,并返回一个布尔值作为结果。

所以当你运行时:

echo "Author: Knuth, Donald E." | recfmt "{{Author ~ '^([^,]+).*'}}"

该表达式的Author ~ '^([^,]+).*'计算结果为 ,1因为该字段的值Author与给定的表达式匹配。

我不相信模板语言提供任何类型的转换功能(您不能过滤/剪切/修改字段作为模板的一部分)。当然,您可以对输出进行后处理,例如recsel使用sedawk其他工具。

相关内容