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