Manipuler les chaines en Bash

Tags:: linux :: bash

Je continue ma série d'articles sur le scripting bash. Il y a des milliers de choses à connaître et vous n'avez pas finit d'être étonné. Aujourd'hui je vais vous parler un peu des manipulations possibles de bash sur des chaines contenues dans des variables. En effet, plutôt que de passer par "awk" ou "sed" à chaque fois pour des opérations de simples substitution ou de découpe, il suffira de connaitres les "built-in" de Bash qui permettent pas mal d'opérations.

En premier lieu, voyons comment nous pouvons faire une sous-chaîne entre deux position de caractères.


foo="abracadabra"
echo "la chaine est $foo"
echo ${foo:3:5}
 

Le résultat est le suivant:


la chaine est abracadabra
racad
 

La syntaxe est en fait très simple, il suffit de faire:


${nomDeVariable:debut:nombreDeCaractères}
 

En d'autres termes, ${foo:3:5} retourne 5 caractères de la chaine contenu dan $foo à partir du 3ième caractère. Simple et efficace :)

Outre les sous-chaines (substring ou substr) existent des extensions de variables très intéressantes, comme par exemple la matching. Imaginons que nous ayons un nom de fichier ''foo_bar.tar.gz". Voici ce que nous pouvons en sortir:


foo="foo_bar.tar.gz"

echo ${foo#*.}
>tar.gz

echo ${foo##*.}
>gz

 

Peut-être est-ce un peu plus complexe mais en réalité c'est assez simple. "#" veut dire, dans le contexte de variable, que nous cherchons dans la chaine depuis le début. La recherche s'arrête à la chaine la plus courte jusqu'à tomber sur un point ".". En doublant le "#" (donc avec ##), cela signifie que nous cherchons la chaine la plus longue jusqu'à ce que nous arrivons à un point.

Donc dans le premier cas, nous avons enlevé la chaine la plus courte avant un point, soit "foo_bar", dans le second cas c'est la chaine la plus longue: "foo_bar.tar". C'est pratique pour trouver une extension de fichier :)

Si # correspond au début, le symbole % correspond à la fin. Ainsi:


foo="foo_bar.tar.gz"

echo ${foo%*.}
>gz

echo ${foo%%*.}
>tar.gz
 

Vous l'avez compris, c'est exactement pareil, mais à partir de la fin.

Reste alors les opérations arithmétique possibles par Bash. Seuls les nombres entiers fonctionnent, dans le cas des nombres décimaux je vous invite à utiliser la commande bc. Les opération arithmétique se déposent dans le contexte double parenthèse:


$(())
 

Ainsi:


foo=3
echo $foo+7
>3+7

echo $((foo+7))
>10

 

Les opérateurs possibles sont: + - * / %, où "%" correspond au modulo (reste de la division entière).

Bref, tout ça pour vous dire que, sans imaginer développer des logiciels très complexes, la puissance de Bash peut vous amener à développer des scripts assez complet, riches et fonctionnels.

La prochaine fois je tenterai de vous parler de "menu bash". En attendant, éclatez vous sur vos scripts.

Utilisez le code barre pour ouvrir le ticket dans votre mobile:
This ticket on you mobile

Pas de commentaire pour le moment

Ajouter un commentaire
Veuillez répondre à la question suivante : Indiquez en chiffre ce que vaut deux et deux

Trackbacks

Pour ajouter un trackback (retrolien) sur ce ticket, utilisez cette adresse: http://www.metal3d.org/index.php/trackback/default/tb?id=blog%2F232

Tags

Blog Copix Communication PC Config Fedora Vidéo Humour Autre Web Materiel Informatique PHP Développement Mootools HTML Linux WEB IE CSS Vista Microsoft Sympa XHTML Quizz Widget Klik CWE Voeux Bonne année Musique CCRMA Son Audio MAO Reconnaissance vocale Windows Mac Compiz MacOS Mysql Sun Base de données BD Screenlets Screenlet RPM compiz Ubuntu Live FireFox Derambarsh Facebook media informations Sécurité javascript SSH Commande Marketing concours ipod wii QT Trooltech Nokia Libre Logiciels GPL Attali Gnome Dock Compiler Bench undelete reiserfs recovery recover Thread Serveur Optimisation Server Apache Album RSS Flash Air XML Firefox Blender Opensource Orange Internet LiveBox Animaux Droits Logiciels Libres Google Loi RBS netcat Bash Téléphone Spam 3D NIDIA Standards Widgets Merise UML Streaming Developpement Perl MySQL Firewall Parfeu Bayes Novell Réseau Python LVS Salon FTP Dedibox Chrome Administration IRC Gentoo troll video Nouveauté Finance Etudiant spéctacle OpenOffice Javascript Java Info Eclpise ATI design mootools KDE Bureau Design GNU C Pages Jaunes Fun Bijoux Art mail Admin vmware fedora linux VirtualBox VMWare Qemu KVM vim Grep Fglrx Webkit GTK google web JQuery Coup de gueule coup de gueule Lois SVG Raycaster Canvas Hadopi Desktop Jeux Les Sims développement astuces Screen firefox Mobile Safaru Wine bash commande astuce Wave ooc C++ C# Netbook Hercules Bureautique Twitter Safari W3C chrome kazehakaze midori navigateur gecko webkit Links Liens Pyhon Nouvelles Metal Perso Conférence JDLL PCC Roadsend OOC News Acteur Cinéma Chanteur Seven windows orthographe pcc php jdll Slide Application mysql Html twitter python screen curses SVN Android Gphone iPhone OpenGL MindMap Projet Javascrtip Ajax Guitare Tab Tablature JSON firebug Chromium Iphone Titanium music sound android ogg ogv streaming Arkyne svn subversion gnome VLC Tv encoder ffmpeg Cryptage apple microsoft HTML5 Max Apple code youtube quvi git uzbl webgl chromium

  Catalogue professionnel de musique libre


  • twitter entries...
follow me on Twitter

Valid XHTML 1.0 Strict

tumblr visitor