在 GNU Recutils手册中,写道
返回最长的匹配;这适用于整个正则表达式和(受此约束)组内的子表达式。
但是,当我运行以下命令时(在 macOS 上,通过自制软件安装了 recutils)
echo "Author: Knuth, Donald E." | recfmt "{{Author ~ '^([^,]+).*'}}"
结果我得到了布尔值1
。
我认为正则表达式是正确的,因为以下命令正确返回Knuth
.
echo "Knuth, Donald E." | sed -E "s/^([^,]+).*/\1/"
我误解了手册还是这是一个错误?如果是这样,是否有另一种方法来获得匹配而不是布尔值?
更新。我在 Debian 虚拟机上得到了相同的行为。
该
~
运算符是一个比较运算符:它回答问题“左边的字符串是否与右边的表达式匹配?”,并返回一个布尔值作为结果。所以当你运行时:
表达式的
Author ~ '^([^,]+).*'
计算结果为,1
因为Author
字段的值与给定的表达式匹配。我不相信模板语言提供任何类型的转换功能(您不能过滤/剪切/修改字段作为模板的一部分)。当然,您可以对
recsel
using或其他工具之类的输出进行后处理。sed
awk