NAME

App::Greple::tee - modul de înlocuire a textului cu rezultatul unei comenzi externe

SYNOPSIS

greple -Mtee command -- ...

VERSION

Version 1.02

DESCRIPTION

Modulul -Mtee al lui Greple trimite partea de text potrivit la comanda de filtrare dată și le înlocuiește cu rezultatul comenzii. Ideea este derivată din comanda numită teip. Este ca și cum ar ocoli datele parțiale către comanda de filtrare externă.

Comanda de filtrare urmează după declarația modulului (-Mtee) și se termină prin două liniuțe (--). De exemplu, următoarea comandă apelează comanda tr comanda cu argumente a-z A-Z pentru cuvântul potrivit din date.

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

Comanda de mai sus convertește toate cuvintele potrivite din minuscule în majuscule. De fapt, acest exemplu în sine nu este atât de util, deoarece greple poate face același lucru mai eficient cu opțiunea --cm.

În mod implicit, comanda este executată ca un singur proces, iar toate datele corespunzătoare sunt trimise la proces amestecate împreună. În cazul în care textul potrivit nu se termină cu newline, acesta este adăugat înainte de trimitere și eliminat după primire. Datele de intrare și de ieșire sunt mapate linie cu linie, astfel încât numărul de linii de intrare și de ieșire trebuie să fie identic.

Utilizând opțiunea --discret, comanda individuală este apelată pentru fiecare zonă de text potrivit. Puteți face diferența prin următoarele comenzi.

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

Liniile de date de intrare și de ieșire nu trebuie să fie identice atunci când se utilizează opțiunea --discrete.

OPTIONS

--discrete

Invocarea unei noi comenzi individuale pentru fiecare piesă care se potrivește.

--bulkmode

Cu opțiunea <--discrete>, fiecare comandă este executată la cerere. Opțiunea <--bulkmode> option causes all conversions to be performed at once.

--crmode

Această opțiune înlocuiește toate caracterele newline din mijlocul fiecărui bloc cu caractere carriage return. Carriage returns conținute în rezultatul executării comenzii sunt returnate la caracterul newline. Astfel, blocurile formate din mai multe linii pot fi procesate în loturi fără a utiliza opțiunea --discrete.

--fillup

Combină o secvență de linii care nu sunt goale într-o singură linie înainte de a le trece la comanda de filtrare. Caracterele newline dintre caracterele de lățime mare sunt șterse, iar celelalte caractere newline sunt înlocuite cu spații.

--squeeze

Combină două sau mai multe caractere de linie nouă consecutive într-unul singur.

-ML --offload command

Opțiunea --offload a teip(1) este implementată în modulul diferit App::Greple::L (-ML).

greple -Mtee cat -n -- -ML --offload 'seq 10 20'

De asemenea, puteți utiliza modulul -ML pentru a procesa numai liniile cu număr par, după cum urmează.

greple -Mtee cat -n -- -ML 2::2

LEGACIES

Opțiunea --blocks nu mai este necesară acum că opțiunea --stretch (-S) a fost implementată în greple. Puteți efectua pur și simplu următoarele.

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

Nu se recomandă utilizarea opțiunii --blocks, deoarece aceasta poate fi depreciată în viitor.

--blocks

În mod normal, zona care corespunde modelului de căutare specificat este trimisă la comanda externă. În cazul în care se specifică această opțiune, nu zona care corespunde, ci întregul bloc care o conține va fi procesat.

De exemplu, pentru a trimite liniile care conțin modelul foo la comanda externă, trebuie să specificați modelul care se potrivește cu întreaga linie:

greple -Mtee cat -n -- '^.*foo.*\n' --all

Dar cu opțiunea --blocuri, se poate face la fel de simplu, după cum urmează:

greple -Mtee cat -n -- foo --blocks

Cu opțiunea --blocuri, acest modul se comportă mai mult ca opțiunea -g de la teip(1). În rest, comportamentul este similar cu cel al lui teip(1) cu opțiunea -o.

Nu utilizați --blocks cu opțiunea --all, deoarece blocul va fi reprezentat de toate datele.

WHY DO NOT USE TEIP

În primul rând, ori de câte ori puteți face acest lucru cu comanda teip, utilizați-o. Este un instrument excelent și mult mai rapid decât greple.

Deoarece greple este concepută pentru a procesa fișiere document, are multe caracteristici care îi sunt adecvate, cum ar fi controalele zonei de potrivire. Ar putea merita să utilizați greple pentru a profita de aceste caracteristici.

De asemenea, teip nu poate trata mai multe linii de date ca o singură unitate, în timp ce greple poate executa comenzi individuale pe un fragment de date format din mai multe linii.

EXAMPLE

Următoarea comandă va găsi blocuri de text în interiorul documentului de stil perlpod(1) inclus în fișierul modul Perl.

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

Puteți să le traduceți prin serviciul DeepL executând comanda de mai sus convinsă cu modulul -Mtee care apelează comanda deepl astfel:

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

Totuși, modulul dedicat App::Greple::xlate::deepl este mai eficient în acest scop. De fapt, sugestia de implementare a modulului tee a venit de la modulul xlate.

EXAMPLE 2

Următoarea comandă va găsi o parte indentată în documentul LICENȚĂ.

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.

Puteți reformata această parte utilizând modulul tee cu comanda ansifold:

greple -Mtee ansifold -rsw40 --prefix '     ' -- --discrete --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.

Opțiunea --discrete va porni mai multe procese, astfel încât procesul va dura mai mult timp pentru a se executa. Astfel, puteți utiliza opțiunea --separate '\r' cu ansifold care produce o singură linie folosind caracterul CR în loc de NL.

greple -Mtee ansifold -rsw40 --prefix '     ' --separate '\r' --

Apoi, convertiți caracterul CR în NL prin comanda tr(1) sau alta.

... | tr '\r' '\n'

EXAMPLE 3

Luați în considerare o situație în care doriți să căutați prin grep șiruri de caractere din liniile fără antet. De exemplu, este posibil să doriți să căutați numele imaginilor Docker din comanda docker image ls, dar să lăsați linia de antet. Puteți face acest lucru prin următoarea comandă.

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

Opțiunea -ML 2: recuperează penultimele linii și le trimite către comanda grep perl. Opțiunea --discrete este necesară deoarece numărul de linii de intrare și de ieșire se modifică, dar deoarece comanda este executată o singură dată, nu există niciun dezavantaj de performanță.

Dacă încercați să faceți același lucru cu comanda teip, teip -l 2- -- grep va da o eroare deoarece numărul de linii de ieșire este mai mic decât numărul de linii de intrare. Cu toate acestea, nu există nicio problemă cu rezultatul obținut.

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

BUGS

Opțiunea --fillup va elimina spațiile dintre caracterele Hangul la concatenarea textului coreean.

AUTHOR

Kazumasa Utashiro

LICENSE

Copyright © 2023-2025 Kazumasa Utashiro.

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