IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Linux Professional Institute Certificate. LPIC-1

Lpic1 large.gif
Certificat LPIC-1
Examen: 101 (torneu a la resta de temes)
Fitxers: LPI103.2_Processar_fluxos_text_amb_filtres.pdf (LPI103.2_Processar_fluxos_text_amb_filtres.odp)
Objectius: http://www.lpi.org/eng/certification/the_lpic_program/lpic_1/exam_101_detailed_objectives
Dipòsit SVN: https://svn.projectes.lafarga.cat/svn/lpi/Materials/Examen_101/103.2
Usuari: anonymous
Paraula de pas: qualsevol paraula de pas

Objectius

103.2. Processar fluxos de text utilitzant filtres
Objective.jpg
  • Objectiu: Els candidats han de ser capaços d'aplicar filtres a fluxos de text.
  • Pes: 3
060317 Icon - Theory of Knowledge v01 pdc.jpg

Àrees Clau de Coneixement:

  • Enviar fitxers de text i fluxos de sortida a través de filtres processadors de textos per a modificar la sortida utilitzant les instruccions estàndard UNIX incloses al paquet textutils de GNU.
Icon list.jpg

La següent és una llista parcial de fitxers, termes i utilitats utilitzades:

Text-editor.svg

Apunts: LPI 103.2. Processar fluxos de text utilitzant filtres


Paquet textutils

Aquests paquet instala totes les aplicacions basiques per poder treballar.

Ara es una tercera part del coreutils, que inclou:

Inclou els Shellutils (vists al LPI 103.1), els textsutils (vists a LPI 103.2), Fileutils (vists al LPI 103.3)


[email protected]:~$ sudo apt-get install coreutils 
[sudo] password for alumne: 
S'està llegint la llista de paquets... Fet
S'està construint l'arbre de dependències       
S'està llegint la informació de l'estat... Fet
coreutils ja es troba en la versió més recent.

Sistemes Debian

man i info

Coreutils és un paquet de GNU

  • Les ordres de coreutils tenen tant man com info.
  • Al tractar-se però d'eines de GNU, trobareu més informació a les pàgines info
  • Cal tenir en compte que per consultar les pàgines info cal

Per veure la informacio d'una comanda fem:

$ info coreutils cat

Ordres

Opcions comunes a totes les aplicacions GNU

cat

La paraula cat prové de concatenate, es a dir, posar una cosa despres de l'altra.

El podem fer servir per veure fitxers senzills.

Exemple de concadenar 2 fitxers:

Primer he creat 2 documents diferents a l'escriptori i amb aquesta odre els ajunta.

Cat.png
[email protected]:~/Escriptori$ cat numeros noms 
1 
2
3
4
5
6
7
8
9
10
pepito
grillo
oscar
adan
joan
ivan

Opcions del cat

  • Amb el -E mostra on s'acaben les linies
[email protected]:~/Escriptori$ cat -E numeros noms 
1 $
2$
3$
4$
5$
6$
7$
8$
9$
10$ 
pepito$
grillo$
oscar$
adan$
joan$
ivan$
  • Amb el -n ens mostra els numeros de linea.
[email protected]:~/Escriptori$ cat -n numeros noms
  • L'opció -s eliminar múltiples línies en blank.
[email protected]:~/Escriptori$ cat -s numeros noms
  • L'opció -T mostrar caràcters especials
[email protected]:~/Escriptori$ cat -T numeros noms
  • Tenim l'opcio de que ens copie l'entrada a la sortida estandard
[email protected]:~/Escriptori$ cat
echo hola | cat       
echo hola | cat
  • I per ultim la opcio de concatenar al reves
[email protected]:~/Escriptori$ tac numeros noms 
10
9
8
7
6
5
4
3
2
1 
ivan
joan
adan
oscar
grillo
pepito

Utilitzar la entrada estàndard. Caràcter -

[email protected]:~/Escriptori$ echo "-------" | cat numeros - noms 
1 
2
3
4
5
6
7
8
9
10
-------
pepito
grillo
oscar
adan
joan
ivan

cut

Extreu porcions de text de les línies de l'entrada estàndard i les mostra per la sortida estàndard.

Hi ha tres formes diferents de tallar:

  • Per bytes: Si volem extreure una llista de bytes especifica utilitzem el -b.
  • Per caràcters: Si volem extreure una llista de caràcters especifica utilitzem el -c.
  • Per camps: Si volem mostrar una llista de camps especifica utilitzem el -f.

Exemples de llistes:

  • 2: Especifica el segon camp
  • 2-6: Un rang (de 2 a 6)
  • -4 o 4- o 4+: un rang obert
[email protected]:~/Escriptori$ date | cut -c11-19
12:17:23 

Aqui ens mostra la data completa.

[email protected]:~/Escriptori$ date 
dc mai  9 12:18:29 CEST 2012

I ara nomes volem veure la columna 1, es a dir, el dia.

[email protected]:~/Escriptori$ date | cut -d " " -f 1
dc


Exemple de creacio d'un fitxer que ens mostre els dia, el mes, o el que desitjem:

  • Creem un fitxer que es digui DIA.sh.
  • Introduim al interior el seguent:
#!/bin/bash
 DIA=$(date | cut -d " " -f 1,2,3)
 echo $DIA
  • El fem executable:
[email protected]:~/Escriptori$ chmod u+x DIA.sh 
  • L'executem:
[email protected]:~/Escriptori$ ./DIA.sh 
dc mai

Exemple de programa que ens torni la MAC


  • Creem un fitxer que es digui MAC.sh.
  • Introduim al interior el seguent:
#!/bin/bash
 ifconfig eth5 | grep HWaddr | cut -d " " -f 11
 echo $DIA
  • El fem executable:
[email protected]:~/Escriptori$ chmod u+x MAC.sh 
  • L'executem:
[email protected]:~/Escriptori$ ./MAC.sh 
00:30:05:eb:3f:38

expand

Converteixen tabuladors en espais i viceversa:

  • Permet agrupar una sèrie d'espais en tabuladors
  • Els tabuladors són més útils que els espais per tal de navegar còmodament pels fitxers
  • unexpand: espais a tabuladors (8 espais son 1 Tab)
  • expand: tabuladors a espais

fmt

Permet formatar fitxers

  • Formata paràgrafs, amb línies massa llargues
  • La mida màxima d'una línia és 75 caràcters.
  • Es pot canviar la mida màxima de línia amb l'opció -w

Exemple amb un document de text

[email protected]:~/Escriptori$ fmt -w 30 Titanic.txt 
El RMS Titanic (en anglès:
Royal Mail Steamship
Titanic, Vaixell Correu
Reial Titanic) era el segon
de tres transatlàntics de la
companyia anglesa White Star
Line (junt amb el RMS Olympic
i el HMHS Britanic) que
pretenien dominar el negoci
dels viatges transoceànics
a principis del segle XX. El
Titanic fou varat el 1911
i entrà en servei l'any
següent, essent el vaixell
de passatgers més gran i
luxós de l'època juntament
amb el RMS Olympic.

head

Comanda util per a fitxers grans per poder mostrar el principi (head) o el fina (tail), es mostren les 10 primeres o 10 ultimes linies. Tot i que podem modificar la mida que vulguem nosaltres.

  • Per mida en bytes. -c num o --bytes=num: Mostra els primers num bytes
  • Per número de línies. -n num o --lines=num: Mostra les primeres num línies.

D'aquesta forma nomes ens ensenya 3 linies.

[email protected]:~/Escriptori$ head --lines=3 Titanic.txt

I d'aquesta ens mostra les 10 primeres, del Syslog, el qual es mol llarg.


[email protected]:~/Escriptori$ tail -f /var/log/syslog
May  9 11:54:43 PC-IMATGE avahi-daemon[842]: Invalid legacy  unicast query packet.
May  9 11:54:43 PC-IMATGE avahi-daemon[842]: Received  response from host 192.168.203.205 with invalid source port  59336 on interface 'eth5.0'
May  9 11:55:44 PC-IMATGE avahi-daemon[842]: last message  repeated 10 times
May  9 12:09:01 PC-IMATGE CRON[22421]: (root) CMD (  [ -x   /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find  /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin  +$(/usr/lib/php5/maxlifetime) -delete)
May  9 12:17:01 PC-IMATGE CRON[22434]: (root) CMD (   cd /  && run-parts --report /etc/cron.hourly)
May  9 12:39:01 PC-IMATGE CRON[22723]: (root) CMD (  [ -x  /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find  /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin  +$(/usr/lib/php5/maxlifetime) -delete)
May  9 12:51:15 PC-IMATGE kernel: [15035.909689] r8169:  eth5: link down
May  9 12:51:15 PC-IMATGE NetworkManager: <info>  (eth5):  carrier now OFF (device state 8, deferring action for 4  seconds)
May  9 12:51:18 PC-IMATGE NetworkManager: <info>  (eth5):  carrier now ON (device state 8)
May  9 12:51:18 PC-IMATGE kernel: [15038.311916] r8169:   eth5: link up

od

  • Els fitxer de tipus text es poden mostrar de forma senzilla per la línia de comandes amb comandes com cat, more o less.
  • En canvi els fitxers binaris mostraran caràcters estranys (garbage characters) si els mostreu amb aquest tipus de comandes (recordeu l'ordre reset per fer neteja)
[email protected]:~/Escriptori$ cat /bin/ls
�U��}�	Ɖ;�?t�����y����}����ԍ}����ʋU�����?���
1��U�뿋U������wp��1��U�뫍}�듍}���뉍}���|����} ����o����U�����w.��	1��U��e����} ���J����U�1��N����U���������E�����������0��� �D$
[email protected]:~/Escriptori$ od /bin/ls
0262320 124550 004004 124550 004004 124550 004004 124550  004004
0262340 124550 004004 124550 004004 125100 004004 125100  004004
0262360 125100 004004 125100 004004 125100 004004 125100  004004
0262400 124550 004004 124550 004004 124550 004004 124550  004004

Mostra fitxers binaris en octal i altres formats

[email protected]:~/Escriptori$ cat numeros 
1 
2
3
4
5
6
7
8
9
10
[email protected]:~/Escriptori$ od numeros 
0000000 020061 031012 031412 032012 032412 033012 033412  034012 
0000020 034412 030412 005060
0000026

Tenim una ajuda per poder veure els numeros en octal, es ascii

[email protected]:~/Escriptori$ ascii -o
    0 NUL    20 DLE    40      60 0   100 @   120 P   140 `   160 p 
    1 SOH    21 DC1    41 !    61 1   101 A   121 Q   141 a   161 q 
    2 STX    22 DC2    42 "    62 2   102 B   122 R   142 b   162 r 
    3 ETX    23 DC3    43 #    63 3   103 C   123 S   143 c   163 s 
    4 EOT    24 DC4    44 $    64 4   104 D   124 T   144 d   164 t 
    5 ENQ    25 NAK    45 %    65 5   105 E   125 U   145 e   165 u 
    6 ACK    26 SYN    46 &    66 6   106 F   126 V   146 f   166 v 
    7 BEL    27 ETB    47 '    67 7   107 G   127 W   147 g   167 w 
   10 BS     30 CAN    50 (    70 8   110 H   130 X   150 h   170 x 
   11 HT     31 EM     51 )    71 9   111 I   131 Y   151 i   171 y 
   12 LF     32 SUB    52 *    72 :   112 J   132 Z   152 j   172 z 
   13 VT     33 ESC    53 +    73 ;   113 K   133 [   153 k   173 { 
   14 FF     34 FS     54 ,    74 <   114 L   134 \   154 l   174 | 
   15 CR     35 GS     55 -    75 =   115 M   135 ]   155 m   175 } 
   16 SO     36 RS     56 .    76 >   116 N   136 ^   156 n   176 ~ 
   17 SI     37 US     57 /    77 ?   117 O   137 _   157 o   177 DEL

join

Combina el contingut de dos fitxers segons un camp (field) coincident als dos fitxers. Típicament els camps estan separats per espais, però es poden especificar altres caracters com a separadors de línia amb l'opció '-t' char on char és el caràcter que voleu utilitzar com a separador.

[email protected]:~/Escriptori$ cat telefons.txt 
93-894-56-45  Linus Torvalds
977-44-45-34  Richard Stallman
93-144-56-51  Pepe Pardo Jeans
93-345-53-21  George Orwell
[email protected]:~/Escriptori$ cat grups_telefons.txt 
93-894-56-45  Grup1
977-44-45-34  Grup1
93-144-56-51  Grup3
93-345-53-21  Grup2
[email protected]:~/Escriptori$ join telefons.txt grups_telefons.txt 
93-894-56-45 Linus Torvalds Grup1
977-44-45-34 Richard Stallman Grup1
93-144-56-51 Pepe Pardo Jeans Grup3
93-345-53-21 George Orwell Grup2

nl

paste

pr

Es feia servir antigament per preparar un fitxer per a ser imprimit (pr prové de la paraula anglesa print)

sed

Es un editor de flux de dades que ens permet dur a terme transformacions bàsiques de text en un flux d'entrada (un fitxer o una entrada des d'una canonada).

La comanda sed modifica el contingut d'un fitxer i envia els canvis per la sortida estàndard.

  • Accions:
  • Suprimir una línia determinada d’un fitxer
  • Suprimir un conjunt de línies determinades.
  • Suprimir línies que coincideixin amb un patró determinat.
  • Reemplaçar una cadena de text.
  • Afegir una línia després de cada línia de l’arxiu.

Sintaxi

$ sed [opcions] -f script-file [fitxer-entrada]
$ sed [opcions] script-text [fitxer-entrada]

Exemple 1

  • Creem un fitxer amb el calendari de tot el 2012
[email protected]:~$ cal 2012 > calendari-2012.txt
                             2012

       Gener                 Febrer                 Març
dl dt dc dj dv ds dg  dl dt dc dj dv ds dg  dl dt dc dj dv ds dg
                   1         1  2  3  4  5            1  2  3  4
 2  3  4  5  6  7  8   6  7  8  9 10 11 12   5  6  7  8  9 10 11
 9 10 11 12 13 14 15  13 14 15 16 17 18 19  12 13 14 15 16 17 18
16 17 18 19 20 21 22  20 21 22 23 24 25 26  19 20 21 22 23 24 25
23 24 25 26 27 28 29  27 28 29              26 27 28 29 30 31
30 31                                       
       Abril                  Maig                  Juny
dl dt dc dj dv ds dg  dl dt dc dj dv ds dg  dl dt dc dj dv ds dg
                   1      1  2  3  4  5  6               1  2  3
 2  3  4  5  6  7  8   7  8  9 10 11 12 13   4  5  6  7  8  9 10
 9 10 11 12 13 14 15  14 15 16 17 18 19 20  11 12 13 14 15 16 17
16 17 18 19 20 21 22  21 22 23 24 25 26 27  18 19 20 21 22 23 24
23 24 25 26 27 28 29  28 29 30 31           25 26 27 28 29 30
30                                          
       Juliol                Agost                Setembre
dl dt dc dj dv ds dg  dl dt dc dj dv ds dg  dl dt dc dj dv ds dg
                   1         1  2  3  4  5                  1  2
 2  3  4  5  6  7  8   6  7  8  9 10 11 12   3  4  5  6  7  8  9
 9 10 11 12 13 14 15  13 14 15 16 17 18 19  10 11 12 13 14 15 16
16 17 18 19 20 21 22  20 21 22 23 24 25 26  17 18 19 20 21 22 23
23 24 25 26 27 28 29  27 28 29 30 31        24 25 26 27 28 29 30
30 31                                       
      Octubre               Novembre              Desembre
dl dt dc dj dv ds dg  dl dt dc dj dv ds dg  dl dt dc dj dv ds dg
 1  2  3  4  5  6  7            1  2  3  4                  1  2
 8  9 10 11 12 13 14   5  6  7  8  9 10 11   3  4  5  6  7  8  9
15 16 17 18 19 20 21  12 13 14 15 16 17 18  10 11 12 13 14 15 16
22 23 24 25 26 27 28  19 20 21 22 23 24 25  17 18 19 20 21 22 23
29 30 31              26 27 28 29 30        24 25 26 27 28 29 30
                                            31


  • Fem que es crei un altre fitxer on es canvien tots els numeros 2012 per 2013, i queda de la seguent forma
 [email protected]:~$ sed 's/2012/2013/' calendari-2012.txt > calendari-2013.txt
                             2013

       Gener                 Febrer                 Març
dl dt dc dj dv ds dg  dl dt dc dj dv ds dg  dl dt dc dj dv ds dg
                   1         1  2  3  4  5            1  2  3  4
 2  3  4  5  6  7  8   6  7  8  9 10 11 12   5  6  7  8  9 10 11
 9 10 11 12 13 14 15  13 14 15 16 17 18 19  12 13 14 15 16 17 18
16 17 18 19 20 21 22  20 21 22 23 24 25 26  19 20 21 22 23 24 25
23 24 25 26 27 28 29  27 28 29              26 27 28 29 30 31
30 31                                       
       Abril                  Maig                  Juny
dl dt dc dj dv ds dg  dl dt dc dj dv ds dg  dl dt dc dj dv ds dg
                   1      1  2  3  4  5  6               1  2  3
 2  3  4  5  6  7  8   7  8  9 10 11 12 13   4  5  6  7  8  9 10
 9 10 11 12 13 14 15  14 15 16 17 18 19 20  11 12 13 14 15 16 17
16 17 18 19 20 21 22  21 22 23 24 25 26 27  18 19 20 21 22 23 24
23 24 25 26 27 28 29  28 29 30 31           25 26 27 28 29 30
30                                          
       Juliol                Agost                Setembre
dl dt dc dj dv ds dg  dl dt dc dj dv ds dg  dl dt dc dj dv ds dg
                   1         1  2  3  4  5                  1  2
 2  3  4  5  6  7  8   6  7  8  9 10 11 12   3  4  5  6  7  8  9
 9 10 11 12 13 14 15  13 14 15 16 17 18 19  10 11 12 13 14 15 16
16 17 18 19 20 21 22  20 21 22 23 24 25 26  17 18 19 20 21 22 23
23 24 25 26 27 28 29  27 28 29 30 31        24 25 26 27 28 29 30
30 31                                       
      Octubre               Novembre              Desembre
dl dt dc dj dv ds dg  dl dt dc dj dv ds dg  dl dt dc dj dv ds dg
 1  2  3  4  5  6  7            1  2  3  4                  1  2
 8  9 10 11 12 13 14   5  6  7  8  9 10 11   3  4  5  6  7  8  9
15 16 17 18 19 20 21  12 13 14 15 16 17 18  10 11 12 13 14 15 16
22 23 24 25 26 27 28  19 20 21 22 23 24 25  17 18 19 20 21 22 23
29 30 31              26 27 28 29 30        24 25 26 27 28 29 30
                                            31

Exemple 1

  • Esborrar els tres últims caràcters d'un fitxer:
$ sed 's/...$//' lol.txt > exemple_sense_tres_ultims_caracters.txt
  • Al fitxer la ultima frase es:
consigues matar a Makarov y la trama termina finalmente.
  • I despres de fer la anterior comanda es queda aixi:
consigues matar a Makarov y la trama termina finalmen

Com esborrar una línia d'un fitxer

Com esborrar els últims caràcters (o els primers) de totes les línies d'un fitxer

Com convertir un fitxer de DOS a UNIX i viceversa

Com modificar un fitxer, buscar i reemplaçar text

Com eliminar una secció d'un fitxer

Com reemplaçar una secció per un altre

Afegir un caràcter al final de totes les línies

extra characters after command

sort

sort i locales

Serveix per ordena les línies d’un fitxer d’entrada segons el criteri que indiquem. . Podem fer-ho numericament o alfabeticament, ascendentment o descendentment definir la part de la línia que s’ha de considerar per ordenar... Text en negreta Caracteristiques de la forma en que volem ordenar:

  • -n: ordena numericament.
  • -K3: ordena pel tercer camp.

Exemple ordenat alfabeticament per defecte

[email protected]:~/Escriptori$ sort /etc/passwd | head
alumne:x:1000:1000:alumne,Ies Ebre,977502136,682642375,:/home_local/alumne:/bin/bash
avahi-autoipd:x:103:110:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false
avahi:x:104:111:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
backup:x:34:34:backup:/var/backups:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
boby:x:1003:1005:bobesponja,,,,:/home_local/boby:/bin/bash
couchdb:x:105:113:CouchDB Administrator,,,:/var/lib/couchdb:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
games:x:5:60:games:/usr/games:/bin/sh
gdm:x:114:120:Gnome Display Manager:/var/lib/gdm:/bin/false

Exemple triant la forma d'ordenar

[email protected]:~$ sort -t: -k3 -n /etc/passwd 
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh

split

Empaquetar un fitxer en múltiples fitxers partits

tail

tr

Passar de majúscules a minúscules i viceversa

Eliminar un caràcter d'un fitxer

Passar un fitxer CSV a tabuladors

unexpand

uniq

Amb el uniq, eliminem les linies duplicades dels documents.

Exemple

Creem un document simple.

[email protected]:~/Escriptori$ cat shakespeare 
To
be
or
not
to 
be
that
is
the
question

El sort ens ho ordena alfabeticament

[email protected]:~/Escriptori$ sort shakespeare | uniq
be
is
not
or
question
that
the
to 
To

xargs

wc

Ens compta paraules, linies, caracters o bytes.

Per triar el que volem que ens compti fem servir els següents parametres despres de posar en wc

Es pot limitar la informació de la sortida amb:

  • -l (--lines): mostra el número de línies.
  • -w (--words): mostra el número de paraules.
  • -c (--bytes): Mostra el número de bytes.
  • -m (--chars): Mostra només els caràcters
  • -L (--Linia llarga): ens mostra la longitud de la linia mes llarga.

Sintaxi --> $ wc "parametre per triar el que volem que ens compti" fitxer

Exemple


fer servir el fitxer de text que hem creat per a un exemple anterior pero que ens pot servir.

[email protected]:~/Escriptori$ cat shakespeare 
To
be
or
not
to 
be
that
is
the
question

Si executem el wc en donara el següent.

[email protected]:~/Escriptori$ wc shakespeare 
10 10 41 shakespeare

Veiem que el fitxer te 10 linies, 10 paraules i 40 bytes.

Altres

awk

Scripts de xarxa

Exemples ALUMNES

grep