GNU Recutilsで一致する式を取得するには?

GNU Recutilsで一致する式を取得するには?

GNU Recutilsから手動、記録によると

可能な限り長い一致を返します。これは、正規表現全体とグループ内のサブ式(この制約に従って)に適用されます。

ただし、次のコマンドを実行すると(macOSではhomebrewを介して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 ~ '^([^,]+).*'次のように評価されます。1Author

私はテンプレート言語がどんな種類の変換機能も提供するとは思いません(テンプレートの一部としてフィールドをフィルタリング/切り取り/変更できません)。もちろん、たとえば他のツールを使用して出力を後処理できますrecselsedawk

関連情報