Astuce
En cas de confusion avec un chemin, genre /machin/truc/chouette après l'option les séparateurs / peuvent être remplacés par des caractères neutres, comme la virgule ou le dièse.
Par exemple avec le chemin précédent :
partant de cette petite astuce , je m'étais dit que j'aurais pu appliquer le principe a ma commande awk pour éviter d'échapper certain caractère
ba sa fonctionne pas
donc je sais pas si remplacés par des caractères neutres est le bon terme?]]>
Imaginez des centaines de pages de ce type et votre mission, récupérer les valeurs des 5 champs pour les mettre dans un tableur. Un travail titanesque à la main...
Pour cela utiliser, sed et les sous-chaines.
- ^<h2> : Ne travailler qu'avec les lignes commençant par la balises <h2>
- [A-Z]{6} : pour le 1er motif de recherche 6 lettres en capitales
- .* : n'importe quoi jusqu'au prochain motif
- ETAGERE[0-9]{2} : le terme ETAGERE suivi de 2 chiffres
- .* : n'importe quoi jusqu'au prochain motif
- [0-9]{8} : une suite de 8 chiffres
- .* : n'importe quoi jusqu'au prochain motif
- BOX[0-9]{2} : le terme BOX suivi de 2 chiffres
- .* : n'importe quoi jusqu'au prochain motif
- [A-Z]{6} : une suite de 6 lettres en capitales
- .* : n'importe quoi jusqu'à la fin de la ligne
Voilà pour les expressions régulières (regex). Pour les rendre compréhensibles par sed, il faudra "échapper" (\) les caractères {, }, ( et ) afin qu'ils ne soient pas considérés comme un élément d'une chaine de caractère mais comme un élément d'une expression régulière.
Ce qui donnera comme regex
^<h2>\([A-Z]\{6\}\).*\(ETAGERE[0-9]\{2\}\).*\([0-9]\{8\}\).*\(BOX[0-9]\{2\}\).*\([A-Z]\{6\}\).*
Tout est bien beau, mais comment virer le code HTML et le blablabla ? En entourant chaque motif de recherche par des parenthèses tout simplement et en rappelant ces extractions par \1 pour la première, \2 pour la seconde et ainsi de suite
- le premier motif \1
- le second : \2
- le 3e : \3
- Et ainsi de suite
Comme c'est pour un tableur, nous passerons par un fichier CSV. Il suffit donc de récupérer les motifs et de les séparer par un point virgule
\1;\2;\3;\4;\5;
Et comme il s'agit d'une substitution, on utilisera l'option -s de sed
Donc au final :
QUi retournera
Si vous voulez créer un fichier csv, simplement rediriger la sortie du terminal > sortie.csv
Si le fichier doit être incrémenté par la lecture de plusieurs sources, utiliser >> à la place de > afin de ne pas écraser le fichier existant mais le compléter.
Enjoy]]>
va changer la seconde occurence de la chaîne toto par TOTO (uniquement la seconde chaîne toto rencontrée dans le texte)
]]>