NAME

App::Greple::tee - 외부 명령 결과로 일치한 텍스트를 대체하는 모듈

SYNOPSIS

greple -Mtee command -- ...

VERSION

Version 1.05

DESCRIPTION

Greple의 -Mtee 모듈은 일치한 텍스트 부분을 지정한 필터 명령으로 보내고, 그 결과로 해당 부분을 대체합니다. 이 아이디어는 teip라는 명령에서 유래했습니다. 부분 데이터를 외부 필터 명령으로 우회(bypass)하는 것과 비슷합니다.

필터 명령은 모듈 선언(-Mtee) 뒤에 오며, 두 개의 대시(--)로 종료합니다. 예를 들어, 다음 명령은 데이터에서 일치한 단어에 대해 a-z A-Z 인자를 사용하여 tr 명령을 호출합니다.

greple -Mtee tr a-z A-Z -- '\w+' ...

위 명령은 일치한 모든 단어를 소문자에서 대문자로 변환합니다. 사실 이 예시는 greple--cm 옵션으로 더 효율적으로 동일 작업을 할 수 있으므로 그다지 유용하지는 않습니다.

기본적으로 명령은 단일 프로세스로 실행되며, 모든 일치 데이터는 함께 섞여 해당 프로세스로 전송됩니다. 일치한 텍스트가 개행 문자로 끝나지 않으면 전송 전 추가하고 수신 후 제거합니다. 입력과 출력 데이터는 줄 단위로 매핑되므로 입력과 출력의 줄 수는 동일해야 합니다.

--discrete 옵션을 사용하면, 각 일치 텍스트 영역마다 개별 명령이 호출됩니다. 다음 명령들을 통해 차이를 확인할 수 있습니다.

greple -Mtee cat -n -- copyright LICENSE
greple -Mtee cat -n -- copyright LICENSE --discrete

--discrete 옵션을 사용하면 입력과 출력 데이터의 줄 수가 동일할 필요가 없습니다.

OPTIONS

CONFIGURATION

모듈 매개변수는 다음 구문을 사용하여 Getopt::EX::Config 모듈로 설정할 수 있습니다:

greple -Mtee::config(discrete) ...
greple -Mtee::config(fillup,crmode) ...

셸 별칭이나 모듈 파일과 함께 사용하면 유용합니다.

사용 가능한 매개변수: discrete, bulkmode, crmode, fillup, squeeze, blocks, nofork.

FUNCTION CALL

외부 명령 대신, 명령 이름 앞에 &를 붙여 Perl 함수를 호출할 수 있습니다.

greple -Mtee '&App::ansifold::ansifold' -w40 -- ...

함수는 fork된 자식 프로세스에서 실행되므로 다음 요구 사항을 따라야 합니다:

완전히 한정된 함수 이름이라면 어떤 것이든 사용할 수 있습니다:

greple -Mtee '&Your::Module::function' -- ...

모듈이 아직 로드되지 않았다면 자동으로 로드됩니다.

편의를 위해 다음의 짧은 별칭을 사용할 수 있습니다:

함수 호출을 사용하면 각 호출마다 외부 프로세스를 fork하는 오버헤드를 피할 수 있으므로, --discrete 옵션과 함께 사용할 때 성능을 크게 향상시킬 수 있습니다.

LEGACIES

greple--stretch (-S) 옵션이 구현됨에 따라 --blocks 옵션은 더 이상 필요하지 않습니다. 다음과 같이 간단히 수행할 수 있습니다.

greple -Mtee cat -n -- --all -SE foo

향후 폐기될 수 있으므로 --blocks 사용은 권장하지 않습니다.

WHY DO NOT USE TEIP

무엇보다도 teip 명령으로 할 수 있는 일이라면 그렇게 하십시오. 훌륭한 도구이며 greple보다 훨씬 빠릅니다.

greple은 문서 파일 처리를 위해 설계되었기 때문에, 매치 영역 제어와 같은 해당 용도에 적합한 많은 기능을 갖추고 있습니다. 이러한 기능을 활용하기 위해 greple을 사용할 가치가 있을 수 있습니다.

또한 teip은 여러 줄의 데이터를 하나의 단위로 다룰 수 없지만, greple은 여러 줄로 구성된 데이터 청크에 대해 개별 명령을 실행할 수 있습니다.

EXAMPLE

다음 명령은 Perl 모듈 파일에 포함된 perlpod(1) 스타일 문서 내부의 텍스트 블록을 찾습니다.

greple --inside '^=(?s:.*?)(^=cut|\z)' --re '^([\w\pP].+\n)+' tee.pm

위 명령에 -Mtee 모듈을 결합하여 deepl 명령을 호출하면 DeepL 서비스로 번역할 수 있습니다. 예시는 다음과 같습니다:

greple -Mtee deepl text --to JA - -- --fillup ...

전용 모듈 App::Greple::xlate::deepl이 이 목적에 더 효과적입니다. 실제로 tee 모듈의 구현 실마리는 xlate 모듈에서 왔습니다.

EXAMPLE 2

다음 명령은 LICENSE 문서에서 일부 들여쓴 부분을 찾습니다.

greple --re '^[ ]{2}[a-z][)] .+\n([ ]{5}.+\n)*' -C LICENSE

  a) distribute a Standard Version of the executables and library files,
     together with instructions (in the manual page or equivalent) on where to
     get the Standard Version.

  b) accompany the distribution with the machine-readable source of the Package
     with your modifications.

이 부분은 tee 모듈과 ansifold 명령을 사용하여 재포맷할 수 있습니다. 두 --crmode 옵션을 함께 사용하면 여러 줄 블록을 효율적으로 처리할 수 있습니다:

greple -Mtee ansifold -sw40 --prefix '     ' --crmode -- --crmode --re ...

  a) distribute a Standard Version of
     the executables and library files,
     together with instructions (in the
     manual page or equivalent) on where
     to get the Standard Version.

  b) accompany the distribution with the
     machine-readable source of the
     Package with your modifications.

--discrete 옵션도 사용할 수 있지만, 여러 프로세스를 시작하므로 실행에 더 오래 걸립니다.

EXAMPLE 3

헤더가 아닌 줄에서 문자열을 grep 하고 싶은 상황을 생각해 보십시오. 예를 들어 docker image ls 명령에서 Docker 이미지 이름을 검색하되 헤더 줄은 남겨두고 싶을 수 있습니다. 다음 명령으로 할 수 있습니다.

greple -Mtee grep perl -- -ML 2: --discrete --all

옵션 -ML 2:는 끝에서 두 번째 줄부터 마지막 줄까지를 가져와 grep perl 명령으로 보냅니다. 입력과 출력의 줄 수가 달라지므로 --discrete 옵션이 필요하지만, 명령이 한 번만 실행되므로 성능 상의 불이익은 없습니다.

같은 작업을 teip 명령으로 시도하면, 출력 줄 수가 입력 줄 수보다 적기 때문에 teip -l 2- -- grep은 오류를 발생시킵니다. 그러나 얻어진 결과 자체에는 문제가 없습니다.

INSTALL

CPANMINUS

$ cpanm App::Greple::tee

SEE ALSO

App::Greple::tee, https://github.com/kaz-utashiro/App-Greple-tee

https://github.com/greymd/teip

App::Greple, https://github.com/kaz-utashiro/greple

https://github.com/tecolicom/Greple

App::Greple::xlate

App::ansifold, https://github.com/tecolicom/App-ansifold

AUTHOR

Kazumasa Utashiro

LICENSE

Copyright © 2023-2026 Kazumasa Utashiro.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.