Diferencia entre revisiones de «Comandos del shell»
(→Cut) |
(→Sort) |
||
(No se muestran 15 ediciones intermedias del mismo usuario) | |||
Línea 1: | Línea 1: | ||
En aquest article estan les ordres bàsiques que cal controlar abans de posar-se a fer scripts . | En aquest article estan les ordres bàsiques que cal controlar abans de posar-se a fer scripts. | ||
A banda d'aquests, cal utilitzar el [[Grep]], [[awk]] i [[Sed]]. I es recomana llegit [[Comandos interesantes]] | |||
No estan totes les opcions, per veure tot el que poden fer, executa el manual en línia amb man <comanda> | |||
[[Exercicis resolts del shell de Linux]] | |||
== Comm == | |||
Aquest comandament compara dos fitxers ordenats. | |||
El resultat és una eixida en 3 columnes. La primera columna conté les línies úniques al primer fitxer, la segona les úniques al segon i la tercera les comuns. Es poden eliminar columnes amb -1, -2 i -3. | |||
Per tant, les següents combinacions amb fitxers A i B són: | |||
* '''comm -1 A B''' : B | |||
* '''comm -2 A B''' : A | |||
* '''comm -3 A B''' : AΔB (Diferencia simètrica) | |||
* '''comm -12 A B''': A∩B (Intersecció) | |||
* '''comm -13 A B''': B-A (Diferència de conjunts) | |||
* '''comm -23 A B''': A-B (Diferència de conjunts) | |||
== Cut == | == Cut == | ||
Línea 35: | Línea 55: | ||
=== Exemples === | === Exemples === | ||
$ ( | $ (head -5 ; tail -5) < dades | ||
Ordre per veure les primeres 5 línies i les últimes 5 línies d'un fitxer . El ( ) serveix per agrupar els dos comandaments i que acceptin la mateixa entrada estàndard . | Ordre per veure les primeres 5 línies i les últimes 5 línies d'un fitxer . El ( ) serveix per agrupar els dos comandaments i que acceptin la mateixa entrada estàndard . | ||
== nl == | |||
Aquest comandament sense arguments mostra les línies d'un fitxer, de manera similar al '''cat -n''', però no numera les que no tenen res escrit: | |||
$ nl AnalogReadSerial.ino | |||
1 /* | |||
2 AnalogReadSerial | |||
.... | |||
Amb -b podem indicar una expressió regular que indica les línies que sí són numerades: | |||
$ nl -b 'pA' AnalogReadSerial.ino | |||
/* | |||
1 AnalogReadSerial | |||
== Paste == | == Paste == | ||
Línea 49: | Línea 84: | ||
Per exemple , tenim els fitxers: | Per exemple , tenim els fitxers: | ||
== > | == > dades1 < == | ||
1 | 1 | ||
2 | 2 | ||
3 | 3 | ||
== > | == > dades2 < == | ||
a | a | ||
b | b | ||
c | c | ||
== > | == > dades3 < == | ||
* | * | ||
** | ** | ||
Línea 66: | Línea 101: | ||
Fem servir el paste per veure'ls en columnes : | Fem servir el paste per veure'ls en columnes : | ||
$ Paste dades * | $ Paste dades* | ||
1 a * | 1 a * | ||
2b ** | 2b ** | ||
3.c *** | 3.c *** | ||
== seq == | |||
Serveix per a obtindre una seqüencia numèrica. | |||
$ seq 1 10 | |||
En general, es recomana utilitzar l'expansió de claus per a fer el comandament anterior: | |||
$ echo {1..10} | |||
Ja que no executa un altre procés i és més ràpid al ser natiu de bash. No obstant seq permet més opcions com establir l'interval: | |||
$ seq 1 2 100 | |||
Aquest trau els parells. | |||
També permet treballar en decimals: | |||
$ seq .5 .25 3.25 | |||
== Sort == | |||
El comandament '''sort''' ordena el que li entra per la entrada estàndard. Si no especifiquem res, ordena alfabèticament. Però accepta opcions com: | |||
* '''-n''': Ordenar numèricament. | |||
* '''-r''': Ordenar inversament. | |||
* '''-R''': Ordenar de forma aleatòria. | |||
Altres opcions són més sofisticades, com la '''-k''' en la que pots indicar la columna per la qual vols ordenar. Això combinat amb '''-t''' per indicar el delimitador, permet ordenacions tan complexes com la següent, en la que s'ordena numèricament una llista d'IPs: | |||
$ cat ips.txt | sort -n -t . -k 1,1 -k 2,2 -k 3,3 -k 4,4 | |||
== Tr == | == Tr == | ||
Tradueix caràcters o els esborra . | Tradueix caràcters o els esborra. | ||
Agafa els caràcters de l'entrada i els tradueix en funció dels paràmetres . | Agafa els caràcters de l'entrada i els tradueix en funció dels paràmetres . | ||
Cal tenir en compte que tr treballa amb la taula d'ASCII , de manera que podem establir un rang entre els caràcters a traduir : | Cal tenir en compte que tr treballa amb la taula d'ASCII, de manera que podem establir un rang entre els caràcters a traduir : | ||
$ | $ echo " Hola" | tr 'a-z' 'A-Z' | ||
Per passar a majúscules o : | Per passar a majúscules o: | ||
$ | $ echo "Missatge" | tr '\!-~' 'P-~\!-O' | ||
Per xifrar segons el xifrat César tots els caràcters imprimibles del missatge amb un desplaçament de 47 . Per això tradueix de ! a ~ ( tots els caràcters imprimibles de ASCII ) pel rang de P a ~ seguit del rang de ! a O. És l'anomenat ROT47 , que és una extensió del famós [ http://es.wikipedia.org/wiki/ROT13 ROT13 ] | Per xifrar segons el xifrat César tots els caràcters imprimibles del missatge amb un desplaçament de 47 . Per això tradueix de ! a ~ ( tots els caràcters imprimibles de ASCII ) pel rang de P a ~ seguit del rang de ! a O. És l'anomenat ROT47 , que és una extensió del famós [ http://es.wikipedia.org/wiki/ROT13 ROT13 ] | ||
=== Opcions === | === Opcions === | ||
* - | * -c Treu el complement dels caràcters seleccionats. | ||
* - | * -d Esborra els caràcters seleccionats | ||
* - | * -s Esborra repetits. Aquest és molt útil per evitar dobles espais o errors de sintaxi. | ||
=== Exemples === | === Exemples === | ||
Obtenir lletres aleatòries en minúscules | Obtenir lletres aleatòries en minúscules | ||
$ | $ head /dev/urandom | tr -dc "a-z" | ||
En aquest exemple , esborra amb -d tots el que no sigui de az en posar el -c del complement . | En aquest exemple , esborra amb -d tots el que no sigui de az en posar el -c del complement . | ||
A partir de l'exemple anterior es pot obtenir un generador d'adreces [ [ MAC ] ] : | A partir de l'exemple anterior es pot obtenir un generador d'adreces [ [ MAC ] ] : | ||
$ | $ head /dev/urandom | tr - dc "A-F0-9" | head -c 16 | cut --output-delimiter ":" -c1-2,3-4,5-6,7-8,9-10,11-12 | ||
S'obtenen lletres A a F i números de 0 a 9, és a dir , els símbols del [ [ hexadecimal ] ] . Després es divideixen en grups de 2 , separats per: | |||
S'obtenen lletres A a F i números de 0 a 9, és a dir , els símbols del [ [ hexadecimal ] ] . Després es divideixen en grups de 2 , separats per ":" | |||
== uniq == | |||
D'una llista prèviament ordenada, trau els elements sense repetir. | |||
$ echo -e "1\n2\n3\n3\n3" | uniq | |||
=== Opcions === | |||
* -c Trau la quantitat de repreticions dels elements. | |||
* -d imprimix sols les línies duplicades. | |||
* -u imprimix sols les línies úniques. | |||
== fold == | |||
A partir d'una entrada, retalla les línies per tindre una eixida de, com a màxim, uns caracters. | |||
$ cat /dev/urandom | tr -dc ' -~' | fold -w12 | |||
= Enllaços = | |||
* http://linuxcommand.org/man_pages/declare1.html | |||
* https://github.com/dbohdan/structured-text-tools |
Revisión actual - 17:33 20 ene 2021
En aquest article estan les ordres bàsiques que cal controlar abans de posar-se a fer scripts.
A banda d'aquests, cal utilitzar el Grep, awk i Sed. I es recomana llegit Comandos interesantes
No estan totes les opcions, per veure tot el que poden fer, executa el manual en línia amb man <comanda>
Exercicis resolts del shell de Linux
Comm
Aquest comandament compara dos fitxers ordenats.
El resultat és una eixida en 3 columnes. La primera columna conté les línies úniques al primer fitxer, la segona les úniques al segon i la tercera les comuns. Es poden eliminar columnes amb -1, -2 i -3.
Per tant, les següents combinacions amb fitxers A i B són:
- comm -1 A B : B
- comm -2 A B : A
- comm -3 A B : AΔB (Diferencia simètrica)
- comm -12 A B: A∩B (Intersecció)
- comm -13 A B: B-A (Diferència de conjunts)
- comm -23 A B: A-B (Diferència de conjunts)
Cut
Serveix per tallar les línies segons un criteri .
Opcions
- -c talla per caràcters , es pot establir un principi i un final .
- -f talla per columnes . El delimitar de les columnes es posa amb -d
Les columnes s'especifiquen separades amb comes (no pot reordenar), es pot especificar un rang posant NM o -N o N - per dir que volem des del principi fins a N o des de N fins al final .
Exemples
$ cut -d: -f1,3 /etc/passwd
Mostra l'hora actual :
$ date | cut -c12-19
Obtenir la MAC
$ ifconfig eth0 | grep HWaddr | cut -d"" -f11
Donar format a un telèfon :
$ echo '950000000' | cut --output-delimiter "-" -c1-2,3-5,6-
Head i tail
Ordres per veure , respectivament , el principi i el final de fitxers .
Es pot definir la quantitat de línies que es volen veure .
Exemples
$ (head -5 ; tail -5) < dades
Ordre per veure les primeres 5 línies i les últimes 5 línies d'un fitxer . El ( ) serveix per agrupar els dos comandaments i que acceptin la mateixa entrada estàndard .
nl
Aquest comandament sense arguments mostra les línies d'un fitxer, de manera similar al cat -n, però no numera les que no tenen res escrit:
$ nl AnalogReadSerial.ino 1 /* 2 AnalogReadSerial ....
Amb -b podem indicar una expressió regular que indica les línies que sí són numerades:
$ nl -b 'pA' AnalogReadSerial.ino /* 1 AnalogReadSerial
Paste
( Veure també [ [ # Cut | cut ] ] )
Paste serveix per unir diversos fitxers però en diferents columnes de la sortida .
Exemples
Per exemple , tenim els fitxers:
== > dades1 < == 1 2 3
== > dades2 < == a b c
== > dades3 < == * ** ***
Fem servir el paste per veure'ls en columnes :
$ Paste dades* 1 a * 2b ** 3.c ***
seq
Serveix per a obtindre una seqüencia numèrica.
$ seq 1 10
En general, es recomana utilitzar l'expansió de claus per a fer el comandament anterior:
$ echo {1..10}
Ja que no executa un altre procés i és més ràpid al ser natiu de bash. No obstant seq permet més opcions com establir l'interval:
$ seq 1 2 100
Aquest trau els parells.
També permet treballar en decimals:
$ seq .5 .25 3.25
Sort
El comandament sort ordena el que li entra per la entrada estàndard. Si no especifiquem res, ordena alfabèticament. Però accepta opcions com:
- -n: Ordenar numèricament.
- -r: Ordenar inversament.
- -R: Ordenar de forma aleatòria.
Altres opcions són més sofisticades, com la -k en la que pots indicar la columna per la qual vols ordenar. Això combinat amb -t per indicar el delimitador, permet ordenacions tan complexes com la següent, en la que s'ordena numèricament una llista d'IPs:
$ cat ips.txt | sort -n -t . -k 1,1 -k 2,2 -k 3,3 -k 4,4
Tr
Tradueix caràcters o els esborra. Agafa els caràcters de l'entrada i els tradueix en funció dels paràmetres .
Cal tenir en compte que tr treballa amb la taula d'ASCII, de manera que podem establir un rang entre els caràcters a traduir :
$ echo " Hola" | tr 'a-z' 'A-Z'
Per passar a majúscules o:
$ echo "Missatge" | tr '\!-~' 'P-~\!-O'
Per xifrar segons el xifrat César tots els caràcters imprimibles del missatge amb un desplaçament de 47 . Per això tradueix de ! a ~ ( tots els caràcters imprimibles de ASCII ) pel rang de P a ~ seguit del rang de ! a O. És l'anomenat ROT47 , que és una extensió del famós [ http://es.wikipedia.org/wiki/ROT13 ROT13 ]
Opcions
- -c Treu el complement dels caràcters seleccionats.
- -d Esborra els caràcters seleccionats
- -s Esborra repetits. Aquest és molt útil per evitar dobles espais o errors de sintaxi.
Exemples
Obtenir lletres aleatòries en minúscules
$ head /dev/urandom | tr -dc "a-z"
En aquest exemple , esborra amb -d tots el que no sigui de az en posar el -c del complement .
A partir de l'exemple anterior es pot obtenir un generador d'adreces [ [ MAC ] ] :
$ head /dev/urandom | tr - dc "A-F0-9" | head -c 16 | cut --output-delimiter ":" -c1-2,3-4,5-6,7-8,9-10,11-12
S'obtenen lletres A a F i números de 0 a 9, és a dir , els símbols del [ [ hexadecimal ] ] . Després es divideixen en grups de 2 , separats per ":"
uniq
D'una llista prèviament ordenada, trau els elements sense repetir.
$ echo -e "1\n2\n3\n3\n3" | uniq
Opcions
- -c Trau la quantitat de repreticions dels elements.
- -d imprimix sols les línies duplicades.
- -u imprimix sols les línies úniques.
fold
A partir d'una entrada, retalla les línies per tindre una eixida de, com a màxim, uns caracters.
$ cat /dev/urandom | tr -dc ' -~' | fold -w12