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 ~ '^([^,]+).*'
次のように評価されます。1
Author
私はテンプレート言語がどんな種類の変換機能も提供するとは思いません(テンプレートの一部としてフィールドをフィルタリング/切り取り/変更できません)。もちろん、たとえば他のツールを使用して出力を後処理できますrecsel
。sed
awk