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

나는 템플릿 언어가 어떤 종류의 변환 기능도 제공한다고 생각하지 않습니다(템플릿의 일부로 필드를 필터링/잘라내기/수정할 수 없음). 물론, 예를 들어 다른 도구를 사용하여 출력을 사후 처리할 수 recsel있습니다 .sedawk

관련 정보