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

  • Utilitats bàsiques principals dels sistema coreutils dividit en tres parts
  • Shellutils
  • Fileutils mkdir, cd
  • Textutils

Sistemes Debian

man i info

  • Coreutils es un paquet de GNU
  • les ordres tenen tant man com info


Ordres

Opcions comunes a totes les aplicacions GNU

cat

  • concatenate
  • concatena fitxers
  • suporta un numero arbirtari de fitxers
  • pot concatenar un fitxer o més d'un separat per un espai
[email protected]:~$ cat numeros persones
11
12
113 
15
Pep
Jordi
Josep
  • Opcions
$cat -e fitxer mostra caràcters ocults
[email protected]:~$ cat -E persones
11$
12$
113 $
15$
  • mostrar números de linia
$cat -n fitxer
  • Mostra caràcters especials el tabulador
$cat -T persones
  • Copia l'entrada estàndard a la sortida
  • L'ordre tac concatena al reves
  • -
[email protected]:~$ echo "----------" |cat numeros1 - numeros2
1
2
3 
----------
un
dos
tres


Combinar fitxers amb cat

[email protected]:~$ cat primer.txt números > persones 

Copiar la entrada estàndard a la sortida estàndard

Utilitzar la entrada estàndard. Caràcter -

tac

cut

  • Tallar
  • Extreu porcions de text de les linees d'entrada estandard i les mostra per la sortida estandard
  • 3 opcions
  • per bytes opció -b en caràcters ASCII coincideix amb la de caràcter
  • caràcters extreu la llista de caracters especificats
  • per camps opció -f és la més utilitzada Per defecte el separador de

camps és el tabulador. Es poden especificar altres separadors de camp amb l'opció -d char o --delim=char o --delimiter=char.

  • Exemples de llistes
[email protected]:~$ date | cut -c11-19
12:17:28 
  • Altres exemples
[email protected]:~$ date | cut -d " " -f 5
12:20:00


expand

Converteix tabuladors ens espais i viceversa

permet agrupar una serie d'espais en tabuladors

els tabuladors són més útils que els espais per tal de navegar pels fitxers

fmt

permet formatar fitxers

Formata paràgrafs amb línies massa llargues

la mida màxima d'una linea és de 75 caràcters

es pot cambiar la mida màxima amb l'opció -w

[email protected]:~$ fmt -w 30 persones
kdfklfln jn klfnlknfkndfkdkl
klksfkjfkjfkjskf
kjsdfjkldjfkls kdjlkfjdskfjkj
kjdskjdfjkdjfksjdksd
kjklsjflkdsjñlkjflkpeui
ljfkfkl lñkfkljdfkldsjfl

head

Mostren el principi (head=cap) i el final (tail=cua) d'un fitxer

es mostren 10 lines per defecte

[email protected]:~$ sudo tail /var/log/syslog
[sudo] password for jordi: 
May  9 11:38:02 jordi AptDaemon.Worker: INFO: Finished transaction /org/debian/apt/transaction/07782d8378c64f9b9d0e420df7e2bc9d
May  9 11:44:00 jordi AptDaemon: INFO: Quitting due to inactivity
May  9 11:44:00 jordi AptDaemon: INFO: Quitting was requested
May  9 11:54:43 jordi avahi-daemon[928]: Invalid legacy unicast query packet.
May  9 11:54:43 jordi avahi-daemon[928]: Received response from host 192.168.203.205 with invalid source port 59336 on interface 'eth0.0'
May  9 11:54:43 jordi avahi-daemon[928]: Invalid legacy unicast query packet.
May  9 11:54:43 jordi avahi-daemon[928]: Invalid legacy unicast query packet.
May  9 11:54:43 jordi avahi-daemon[928]: Received response from host  192.168.203.205 with invalid source port 59336 on interface 'eth0.0'
May  9 11:55:20  avahi-daemon[928]: last message repeated 10 times
May  9 12:17:01 jordi CRON[2392]: (root) CMD (   cd / && run-parts --report  /etc/cron.hourly)
[email protected]:~$ sudo head /var/log/syslog
May  9 08:50:19 jordi rsyslogd: [origin software="rsyslogd" swVersion="5.8.1" x-pid="787" x-info="http://www.rsyslog.com"] rsyslogd was HUPed
May  9 08:50:47 jordi anacron[902]: Job `cron.daily' terminated
May  9 08:50:47 jordi anacron[902]: Job `cron.weekly' started
May  9 08:50:47 jordi anacron[2872]: Updated timestamp for job `cron.weekly' to 2012-05-09
May  9 08:50:55 jordi anacron[902]: Job `cron.weekly' terminated
May  9 08:50:55 jordi anacron[902]: Normal exit (2 jobs run)
May  9 08:55:14 jordi AptDaemon: INFO: Quitting due to inactivity
May  9 08:55:14 jordi AptDaemon: INFO: Quitting was requested
May  9 09:17:01 jordi CRON[4052]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
May  9 10:04:53 jordi gnome-session[1064]: WARNING: Detected that screensaver has left the bus

es pot modificar la quantitat d'informació mostrada per numero de línies o per mida

per número

[email protected]:~$ sudo head -n 3 /var/log/syslog
May  9 08:50:19 jordi rsyslogd: [origin software="rsyslogd" swVersion="5.8.1" x-pid="787" x-info="http://www.rsyslog.com"] rsyslogd was HUPed
May  9 08:50:47 jordi anacron[902]: Job `cron.daily' terminated
May  9 08:50:47 jordi anacron[902]: Job `cron.weekly' started

per bytes

[email protected]:~$ sudo head -c 150 /var/log/syslog
May  9 08:50:19 jordi rsyslogd: [origin software="rsyslogd" swVersion="5.8.1"  x-pid="787" x-info="http://www.rsyslog.com"] rsyslogd was HUPed
May  9 0

od

Per consultar fitxers binaris

els fitxers de tipus text es poden mostrar de forma senzilla per linea de comandes

el fitxers binaris mostraran caràcters estranys

Codificacio ascii en octal

[email protected]:~$ 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 

Altres formats

  • Hexadecimal
[email protected]:~$ od -t x numeros
0000000 0a320a31 20340a33 360a350a 380a370a
0000020 310a390a 00000a30
0000026
[email protected]:~$ ascii -x
    0 NUL    10 DLE    20      30 0    40 @    50 P    60 `    70 p 
    1 SOH    11 DC1    21 !    31 1    41 A    51 Q    61 a    71 q 
    2 STX    12 DC2    22 "    32 2    42 B    52 R    62 b    72 r 
    3 ETX    13 DC3    23 #    33 3    43 C    53 S    63 c    73 s 
    4 EOT    14 DC4    24 $    34 4    44 D    54 T    64 d    74 t 
    5 ENQ    15 NAK    25 %    35 5    45 E    55 U    65 e    75 u 
    6 ACK    16 SYN    26 &    36 6    46 F    56 V    66 f    76 v 
    7 BEL    17 ETB    27 '    37 7    47 G    57 W    67 g    77 w 
    8 BS     18 CAN    28 (    38 8    48 H    58 X    68 h    78 x 
    9 HT     19 EM     29 )    39 9    49 I    59 Y    69 i    79 y 
    A LF     1A SUB    2A *    3A :    4A J    5A Z    6A j    7A z 
    B VT     1B ESC    2B +    3B ;    4B K    5B [    6B k    7B { 
    C FF     1C FS     2C ,    3C <    4C L    5C \    6C l    7C | 
    D CR     1D GS     2D -    3D =    4D M    5D ]    6D m    7D } 
    E SO     1E RS     2E .    3E >    4E N    5E ^    6E n    7E ~ 
    F SI     1F US     2F /    3F ?    4F O    5F _    6F o    7F DEL 

join

Combina fitxers segons un camp

El camp per defecte és el primer

$cat telefons.txt
93-894-56-45 Linus Torvalds
977-44-45-34 Richard Stallman
93-144-56-51 Pepe Pardo Jeans
$cat grups_telefons.txt
93-894-56-45 Grup1
977-44-45-34 Grup1
93-144-56-51 Grup3
93-345-53-21 Grup2
$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

Per defecte utilitza el primer camp com a camp coincident.

nl

paste

pr

  • Prepara un text per a ser imprimit.
  • Afegir pàgines, capçaleres i peus de pàgina

sed

  • stream editor
  • 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).
  • 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]
  • Sintaxi 2
$ sed [opcions] script-text [fitxer-entrada]
  • En els dos casos anteriors, [fitxer-entrada] és el camí (path) del fitxer que volem modificar. La comanda sed modifica el contingut d'un fitxer i envia els canvis per la sortida estàndard.
  • Sed funciona mitjançant un conjunt d'ordres. Les ordres les podem especificar directament amb script-text o, mitjançant el paràmetre -f, podem utilitzar un fitxer que contingui les ordres. Normalment el conjunt d'ordres especificades directament es posen entre cometes simples.
  • Algunes de les ordres més importants que podeu utilitzar amb sed són:
Ordre Adreces Descripció

Exemples

Crear un fitxer txt amb el calendari de l'any 2012 després amb sed cercarem i reemplacem només la primera coincidència de cada linea

[email protected]:~$ sed 's/2012/2013/' calendari2012.txt > calendari2013.txt 

Cerquem i reemplacem totes les coincidències

[email protected]:~$ sed 's/2012/2013/g' calendari2012.txt > calendari2013.txt 


Com esborrar una línia d'un fitxer

Exemple

Esborrar la línia 10 d'un fitxer

Contingut de la línia 10 de fitxer


Jordiromerounix144.png

Modifiquem la línia 10

[email protected]:~$ sed -i '10d' calendari2013.txt


Jordiromerounix145.png

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

$sed 's/...$//' exemple.txt > exemple_sense_tres_ultims_caracters.txt

Esborrar els dos primers caràcters

$sed 's/^..$//' exemple.txt >exemple_sense_dos_primers_caracters.txt

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

  • Ordenar amb anglès
  • Ordena les línies d’un fitxer d’entrada segons el criteri que indiquem
  • Podem ordenar alfabèticament o numèricament, ascendentment o descendentment, definir la part de la línia que s’ha de considerar per ordenar, etc...
Ordenar un fitxer segons els contingut de tota la línia
[email protected]:~$ sort /etc/passwd |head
alicia:x:1002:1002:alicia,,,,:/home/alicia:/bin/bash
avahi-autoipd:x:105:112:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false
avahi:x:106:113: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
bob:x:1001:1001:bob,,,,:/home/bob:/bin/bash
colord:x:102:105:colord colour management daemon,,,:/var/lib/colord:/bin/false
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
games:x:5:60:games:/usr/games:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
  • Ordena un fitxer númeric
[email protected]:~$ cat numeros
1
2
35
4
5
6
60
688
7
8
...
  • Podem executar
[email protected]:~$ sort -g numeros
1
2
4
5
6
7
8
9
10
11
12
13
25
...
  • o també
[email protected]:~$ sort -n numeros
1
2
4
5
6
7
8
9
10
11
12
13
25
...

sort i locales

split

la comanda split pot dividir un fitxers en múltiples subfitxers. La divisió del fitxer es pot fer per mida o per nombre de línies:

-b size (--bytes=size): parteix el fitxer en fitxers més petits de mida màxima la especificada amb l'opció -b. La mida s'especifica.

-C=size or --line-bytes=size: parteix el fitxer en fitxers més petits de mida màxima la especificada amb l'opció -C però sense trencar salts de línia (excepte que la línia sigui més llarga que la mida especificada)

-l LINES (--lines=LINES): parteix el fitxer en fitxers més petits on cada subfitxer té com a màxim les línies especificades.

Exemples

Si tenim el un fitxer amb els primers numeros 20

[email protected]:~$ split -l 5 numeros20 numeros5
[email protected]:~$ ls -la numeros*
-rw-rw-r-- 1 jordi jordi 72 May 21 13:01 numeros
-rw-rw-r-- 1 jordi jordi 22 May  9 13:08 numeros~
-rw-rw-r-- 1 jordi jordi  7 May  9 12:06 numeros1
-rw-rw-r-- 1 jordi jordi 12 May  9 12:06 numeros2
-rw-rw-r-- 1 jordi jordi 51 May 21 13:17 numeros20
-rw-rw-r-- 1 jordi jordi 10 May 21 13:19 numeros5aa
-rw-rw-r-- 1 jordi jordi 11 May 21 13:19 numeros5ab
-rw-rw-r-- 1 jordi jordi 15 May 21 13:19 numeros5ac
-rw-rw-r-- 1 jordi jordi 15 May 21 13:19 numeros5ad

On a numerosaa conté els 5 primers números, numeros5ab conté els 5 següents números, i així successivament.

[email protected]:~$ cat numeros5aa
1
2
3
4
5

Empaquetar un fitxer en múltiples fitxers partits

tail

tr

translate

Modifica o eliminar caràcters de l'entrada estàndard

La sintaxi és la següent:

$tr [options] SET1 [SET2]

SET1: El conjunt de caràcters a buscar per tal de ser reemplaçats

SET2: El conjunt de caràcters que reemplaçaran al SET1.

Passar de majúscules a minúscules i viceversa

Eliminar un caràcter d'un fitxer

Passar un fitxer CSV a tabuladors

unexpand

uniq

  • Elimina línies duplicades
  • només te en compte línies successives
  • sense la comanda sort no té una utilització real
[email protected]:~$ cat shakespeare 
To
be
or 
no 
to
be
that
is 
the
question
[email protected]:~$ sort shakespeare | uniq
be
is 
no 
or 
question
that
the
to
To
[email protected]:~$ uniq shakespeare 
To
be
or 
no 
to
be
that
is 
the
question

xargs

wc

  • word count
  • wc compta les paraules, així com també pot comptar línies, caràcters i bytes.
[email protected]:~$ wc shakespeare 
10 10 42 shakespeare
  • Format
  • 10 línies (es compten la quantitat de caràcters de nova línia)
  • 10 paraules
  • 42 bytes
  • 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
[email protected]:~$ wc -l /etc/profile
30 /etc/profile
[email protected]:~$ wc -w /etc/profile
111 /etc/profile
[email protected]:~$ wc -c /etc/profile
665 /etc/profile
[email protected]:~$ wc -m /etc/profile
665 /etc/profile

Altres

awk

Scripts de xarxa

Exemples ALUMNES

grep