fichier

vim – editeur texte puissant en console sous linux ubuntu fedora debian etc.

Capture vim en editant du htmlPour ceux qui administrent des serveurs en SSH, vim est un éditeur connu, tout comme nano ou emacs.

Dans ce post je vous présente l’utilisation basique de vim, un éditeur très puissant.

Mais présentement, nous allons voir l’essentiel, ouvrir un fichier, rechercher un texte, modifier un caractère, insérer du texte etc.

Vim n’est pas toujours installé par défaut sur toutes les distributions. Vous devrez éventuellement l’installer.
Sous ubuntu en console (ou terminal):
[bash]sudo apt-get install vim[/bash]
Sous Fedora en root en console (ou terminal):
[bash]yum install vim[/bash]

Une fois installé, vous voilà prêt à éditer tout type de fichier, ou a en créer.
Voici une liste des commandes de base :
vim = lancer vim
vim nom_de_fichier = ouvrir le fichier nom_de_fichier avec vim
vim nom_de_fichier +134 = ouvrir le fichier nom_de_fichier avec vim à la ligne 134

Une fois lancé, vous pouvez de base vous déplacer dans le fichier avec les flèches du clavier, ou encore avec les touches « page up » et « page down ».

Pour éditer le texte vous devez passer en mode « édition », en tapant simplement sur la touche « i » (pour insertion). A partir de là, tout ce que vous tapez sera inséré.
Pour quitter le mode insertion, appuyez une fois sur « echap ».

Vous pouvez maintenant quitter en sauvant la modification en tapant sur la touche « echap », puis « : », puis « wq » et « entrée ».
La pression sur la touche « échap » vous place en mode « action » et vous permet de passer une commande. les actions sont :
i = mode insertion (ne nécessite pas de valider par « entrée »)
w = sauvegarder, ecrire le fichier
q = quitter
q! = quitter en abandonnant les modifications
w! = sauvegarder même si le fichier est verrouillé.
x = supprimer le caractère sous le curseur
dd = supprimer la ligne sous le curseur
G (shift + g) = aller a la fin du fichier
/chaine = rechercher dans le fichier la chaine « chaine »
n = chercher l’occurrence suivante de la chaine recherchée (ne nécessite pas de valider par « entrée »).

Voilà pour les commandes de base. Le plus souvent voila les commandes que je tape :
[code]vim mon_fichier.txt (entrée)
/machaine (entrée)
i (mode insertion)
Je tape ce que je veux ajouter
echap
:
wq (entrée)[/code]

Vim comporte des options plus évoluées qu’il serait difficile de décrire en intégralité, par exemple, on peut rechercher et remplacer une chaine automatiquement avec la commande suivante :
[code]:%s/foo/bar/g[/code]
Recherche toutes les occurrences de « foo » et la remplace par « bar ».

[code]:%s/foo/bar/gc[/code]
La même chose avec demande de confirmation avant chaque remplacement.

Plus d’informations ici : http://vim.wikia.com/wiki/Search_and_replace

C’est tout pour ce petit tour très basique sur l’utilisation de vim, mais sachez que vim peut fonctionner en client/serveur, supporte les expressions régulières (ou rationnelles) dans les commandes, supporte la coloration syntaxique de la plupart des langages connus etc.

Pour avoir une formation sous forme de tutoriel, il vous suffit de taper dans votre console :
[bash]vimtutor[/bash]

Avec un peu d’habitude, vim deviendra votre compagnon indispensable, et vous permettra de gérer la plupart de vos interventions sur des fichiers éditable en quelques secondes (fichiers de configuration, html, php, et tout autre script).

Loading

Tags: , , , , , , , , ,

vendredi, novembre 26th, 2010 Bash, GNU - Linux, Reseau, Technologie Aucun commentaire

AWK – remplacement de caractères et parser des fichiers

La commande awk permet d’effectuer des traitements sur des chaines de caractères ou des fichiers en se basant sur des modèles et un langage propre, ainsi que l’utilisation d’expressions rationnelles.

Premier exemple, parser une ligne contenant des termes séparés par un espace (tout se passe dans un terminal sous GNU/Linux of course) :
On charge une variable avec ces 3 mots :
[bash]ligne="mot1 mot2 mot3"[/bash]
Puis on veut extraire le premier mot :
[bash]echo $ligne|awk -F " " ‘{print $1}'[/bash]
ou extraire le premier et le troisieme :
[bash]echo $ligne|awk -F " " ‘{print $1 $3}'[/bash]

On notera qu’ici -F permet de définir le séparateur de champs, puis, la commande « print » permet d’afficher la valeur contenue dans le champs choisi (indexé de 1 à n). L’index « 0 » comme en bash, représente l’ensemble de la chaine originale passée en argument.

AWK permet également des traitements sur les chaines de caractères, afin par exemple d’opérer un remplacement basé sur un modèle.
On charge une variable avec une chaine :
[bash]ligne="le chien est noir,le chat est gris"[/bash]
Et on va changer la couleur du chien et ne garder que le chien :
[bash]echo $ligne|awk -F "," ‘{gsub("noir","blanc",$1);print $1}'[/bash]
Ceci va afficher « Le chien est blanc ». Comme vu plus haut, le -F permet de casser la chaine sur toutes les virgules rencontrées, chaque élément est accessible via l’index en variable ($1 ou $2 ici). Puis, la commande gsub (substitution) permet de remplacer toute valeur « noir » par « blanc », dans la variable $1 (soit la partie avant la virgule).

La commande gsub s’est donc appliquée à $1, l’instruction print est indépendante, on aurait pu taper:
[bash]echo $ligne|awk -F "," ‘{gsub("noir","blanc",$1);print $1","$2}'[/bash]
afin d’afficher la partie modifiée et la seconde non modifiée.

Jusqu’ici nous avons travaillé sur des variables, mais awk permet de travailler sur des fichiers pour un traitement rapide.
Prenons le fichier /etc/passwd qui contient des éléments de ce type : root:x:0:0:root:/root:/bin/bash

Nous souhaitons par exemple afficher une liste des utilisateurs existants, leur home, et le shell associé. On constate donc que le « : » peut être utilisé comme séparateur.
Nous allons donc afficher le listing voulu de la manière suivante (login => home => shell) :
[bash]awk -F "\:" ‘{print $1" => "$6" => "$7}’ /etc/passwd[/bash]

Dans ce dernier point, nous avons parsé directement un fichier, et affiché le résultat dans la console. Il est possible de renvoyer le résultat dans un fichier avec une simple redirection :
[bash]awk -F "\:" ‘{print $1" => "$6" => "$7}’ /etc/passwd > mon_listing.txt[/bash]

Vous pouvez utiliser différents caractères spéciaux codés de la manière suivante :
\\ Un antislash.

\b retour arriere (backspace).

\n nouvelle ligne.

\r retour chariot.

\t tabulation horizontale.

\v tabulation verticale.

De manière générale les caractères spéciaux (* % etc.) doivent être « échappés » par un antislash.

On peut également utiliser les expressions régulières (ou rationnelles) afin de définir un séparateur.
[bash]awk -F "[^a-z|^A-Z|^0-9|^–|^/|^,]" ‘{print $1" => "$2" => "$3" => "$4" => "$5" => "$6" => "$7}’ /etc/passwd[/bash]

Dans l’exemple ci dessus, on va lire le fichier /etc/passwd on utilisant comme séparateur de champs l’expression rationnelle suivante :
[bash][^a-z|^A-Z|^0-9|^–|^/|^,][/bash]

Celle ci signifie que sera considéré comme séparateur de champs tout caractère qui n’est pas alphanumérique en majuscule ou minuscule, et différent de -, de / et de ,.

Plus d’informations sur les expressions rationnelles : http://fr.wikipedia.org/wiki/Expression_rationnelle

Dernier exemple, on va passer une chaine en majuscule avec la fonction « toupper » (il existe aussi tolower pour l’inverse):
[bash]echo "Coucou comment ça va?"|awk ‘{print toupper($0)}'[/bash]

Pour plus d’informations, man awk

Loading

Tags: , , , , , , ,

mardi, octobre 26th, 2010 Bash, GNU - Linux, Technologie 2 Comments