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\'`