在 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
使用sed
或awk
其他工具。