Sistema Operatiu Linux

Tema: Filtres i encadenaments



 

INTRODUCCIÓ


GREP COM A FILTRE

 

El filtre SORT

Joan     Reus         977-45-67-89
Pere     Tarragona    977-89-00-00
Marta    Flix         977-90-09-09
Manel    Reus         977-77-45-12

llavors l'ordre sort +1 donarà el següent resultat:

Marta    Flix          977-90-09-09
Joan     Reus          977-45-67-89
Manel    Reus          977-77-45-12
Pere     Tarragona     977-89-00-00
La notació +n significa que no utilitzi els n primers camps. Per tant ha ordenat començant per el segon camp (ciutat).

El filtre UNIQ


El filtre tr

$ cat text | tr A-Z a-z  --> majúscules a minúscules
$ cat text | tr a-z A-Z  --> minúscules a majúscules
tr -s conjunt1 conjunt2
$ cat agenda | tr -s '\t' '\n'
$ cat agenda | tr -sc A-Za-záéíóúàèù\' '\n'
Fixeu-vos que l'apóstrof va precedit d'una barra invertida  (\) per evitar que s'interpreti com  unes cometes.
$ cat text | tr -d A-Za-záéíóúàèòù

ENCADENAMENTS DE FILTRES

 
$ cat > trenca
cat $1 |
tr -sc \A-Za-záéíóúàèù' '\n'
<CTRL> + <D>
$ chmod +x trenca
$ mv trenca bin
$ trenca agenda


PRÀCTICA: filtres i encadenaments.


 

Un programa de recerca de paraules en el diccionari

grep bottle /usr/dict/words
El resultat serà quelcom com aixó:
bottle
bottled
bottleneck
bottlenecks
bottler
bottlers
bottles
grep '^bottle$' /usr/dict/words
Ara el resultat serà:
bottle
grep '^'$1'$' /usr/dict/words
Observeu l'ús que fem de les cometes per delimitar els caràcters especials de forma que no hi hagi confusió amb el paràmetre $1.

Exercici: Amb l'editor vi creeu un comandament anomenat verif per buscar una paraula en el
diccionari. Proveu-lo tant amb paraules que existeixin en el diccionari com que no existeixin.



 

L'EDITOR PROGRAMABLE SED

$ sed 'comandaments' fitxer_de_text
sed llegeix el fitxer línia a línia, aplica els comandaments al text i dóna el resultat per pantalla.
 
  • Per exemple, per buscar i sustituir la paraula UNIX per la paraula Linux en un fitxer anomenat prova i veure el resultat en pantalla:
  • $ sed 's/UNIX/Linux/g' prova
    Quan ho proveu, fixeu-vos en que sed no cambia realment el fitxer, sinó que mostra el resultat de la transformació per pantalla. El comandament  s (substitució) té un sintaxi semblant a vi. El paràmetre g indica que la substitució sigui global, per a totes les ocurrències de la paraula UNIX.
    $ cat > meunom
    who am i | sed 's/ .*//'
    $ sed -n '10,20p' text  --> mostrar línies de la 10 a la 20 de text
    $ sed '1,5d' text       --> elimina les línies de la ú fins la cinc
    $ sed '$d'              --> salta fins l'ùltima línia i l'esborra
    $ sed '/^'Linux'$/q' fitxer_de_text
    $ cat > text_angles
    This is a text for prove the command verif2
    <CTRL> + <D>
    $ trenca text_angles > fitxer_trencat
    $ cat patron1 | sed 's/^/\^/' > patron2
    Per comprovar el resultat feu un cat patron2.
    $ grep -f patron2 /usr/dict/words
    Exercici: crea el comandament patron que prepara el fitxer patron2 a partir d'un fitxer de text qualsevol. Prova a buscar les seves paraules en el diccionari del sistema. Per exemple pots usar el següent text (de traducció inverosímil):
     
    This is a zoom in the garden of zooms and a zulu walking in it.


    Qué pasa amb les paraules del text que no es troven en el diccionari? Quines limitacions hi troves en aquest rudimentari verificador ortogràfic?



    PRÀCTICA: L'editor programable sed