Archives par mot-clé : Recherche

Récupèrer une liste contenant une partie des noms de fichiers

Publié dans Snippet | Laisser un commentaire

But

Dans un dossier, j’ai quelques fichiers se nommant LocalSettings_Wikimachin.php, LocalSettings_Wikitruc.php, … Je souhaite récupérer une liste contenant seulement « machin » et « truc ».

Snippet

wikis=`ls my-folder | sed \'/^LocalSettings_Wiki/!d\' | sed -e \'s/^LocalSettings_Wiki\\(.\\+\\)\\.php/\\1/g\'`
for wiki in $wikis
do
   echo $wiki
done

Ce qui donne :

machin
truc

Explication

  • ls my-folder : Liste les fichiers et répertoires du dossier « my-folder »
  • sed \'/^LocalSettings_Wiki/!d\' : On ne garde que les lignes commençant par « LocalSettings_Wiki ».
    En effet, le flag « d » permet de supprimer les lignes correspondantes au pattern. Donc le flag « !d » ne conserve que les lignes correspondant au pattern.
  • sed -e \'s/^LocalSettings_Wiki\\(.\\+\\)\\.php/\\1/g\'` : Le flag « s » lance une substitution : « s/pattern/replacement/g ».
    On cherche toutes les lignes qui contiennent par « LocalSettings_Wiki(quelque chose).php » et on les remplace par « quelque chose ».
    En ligne de commande, j’avais une étoile à chaque fin de ligne, j’ai donc modifié la commande comme suite : sed -e \'s/^LocalSettings_Wiki\\(.\\+\\)\\.php\\*/\\1/g\'`

Anecdote n°1 : le NSA ne veut pas de Zero-Knowledge Proof of identity

Publié dans L'anecdote du week-end | Laisser un commentaire

En 1987, lorsque Amos Fiat et Adi Shamir, tous deux non-américains et travaillant en dehors des Etats-Unis, ont voulu publier leur article How to Prove Yourself: Pratical Solutions to Identification and Signature Problems, initiant la notion de Zero-Knowledge Proof of Identity, le NSA (l’agence de sécurité nationale des Etats-Unis notamment chargée de la collecte et de l’analyse de toutes les formes de communications) a cherché à les empêcher de publier leurs recherches ! Continuer la lecture

Mysql et la recherche : avec REGEXP

Publié dans SQL | 6 commentaires

Dans un précédent billet, on a vu comment effectuer une recherche assez poussée en MySQL avec LIKE. Mais LIKE n’est vraiment rien comparée à ce que l’on peut faire avec REGEXP OU RLIKE (RLIKE est un alias pour REGEXP. Il a été créé pour un souci de similitude avec mSQL). Et en même temps, je trouve que LIKE suffit la plupart du temps… REGEXP permet d’utiliser les expressions régulières pour retrouver une chaine de caractères dans une table SQL. Il existe 2 types de regex en PHP (petit nom des expressions régulières ^^) :

  • PCRE : issue du langage Perl, ces regex sont réputées difficiles, mais sont rapides et performantes
  • POSIX : mise en avant avec le PHP, ces regex se veut un peu plus simple que les PCRE, elles sont néanmoins moins performantes. MySQL utilise ce type de regex.

Sur son tutoriel de PHP, M@téo21 explique le fonctionnement des regex PCRE pour PHP. Si on comprend les PCRE, on comprend les POSIX, donc si vous n’y connaissez rien en regex, je vous conseille de lire son cours à ce sujet, il est particulièrement bien fait : Cours sur les regex de M@téo21.

Utiliser REGEXP

Une fois que l’on maitrise les regex (voir ci-dessous), utiliser REGEXP n’est pas un problème. Un exemple :

SELECT * FROM table WHERE champ REGEXP "<regex>"

Continuer la lecture

Mysql et la recherche : avec LIKE

Publié dans SQL | Un commentaire

Souvent pour un moteur de recherches sur un site, on propose à l’utilisateur d’entrer un mot clef que l’on cherchera ensuite dans une base de données pour renvoyer les résultats le contenant. Ce billet, et 2 autres qui le suivront, vont présenter 3 méthodes pour effectuer ce type de recherche, en commençant par l’utilisation de LIKE. La première méthode pour effectuer une recherche avec Mysql est d’utiliser LIKE sur un champ texte.

SELECT * FROM table WHERE message LIKE "mot clef";

Cette requête renverra tous les tuples dont le champ message contient exactement la valeur « mot clef », quelque soit la casse. Pour que le résultat dépende de la casse, il faut utiliser LIKE BINARY :

SELECT * FROM table WHERE message LIKE BINARY "Mot Clef";

Mais LIKE permet de faire bien plus que cela. Pour recherche le mot « mot clef » qui se trouverait en plein milieu d’une phrase, on va utiliser le pourcentage ( % ). Le pourcentage est un joker qui correspond à « ou ou plusieurs caractères, n’importe lequel » ou à « pas de caractère ».

SELECT * FROM table WHERE message LIKE "%mot clef%";

Par exemple, les phrases : « Bonjour, j’aime ce joli mot clef tout bleu » ou « Salut beau mot clef » seront renvoyé par cette requête. Mais pas « Salut jolis mots clefs ». Dans le même style, on peut utiliser l’underscore ( _ ), c’est un autre joker qui correspond à « un et un seul caractère, n’importe lequel ».

SELECT * FROM table WHERE message LIKE "%mot_ clef_";

Continuer la lecture