|
[Unix] Initiation à Sed
- Introduction
- La substitution
- La commande print
- La suppression
- L'insertion et la modification
- Les instructions multiples
- Les tampons
- Memento SED
1) IntroductionSed (Stream EDitor) est un éditeur de fichiers texte non interactif. Sed travaille à partir d'un fichier ou de stdin et lit chaque ligne une à une. Il applique ensuite les commandes d'édition souhaitées et renvoie le résultat dans un fichier ou stdout.
Il existe plusieurs façons de lancer sed : - sed 'instructions d'édition' fichier
- sed -f fichierdecommande fichier
- commande | sed'instructions d'édition'
Par défaut, sed agit sur toutes les lignes mais il est possible de préciser une sélection de lignes : sed 'sélectioninstructions d'édition'
La sélection peut être égale à : * une seule ligne 4 : la ligne 4 de l'entrée $ : la dernière ligne de l'entrée
* une série de lignes 4,7 : de la ligne 4 à la 7
* une expression régulière pour sélectionner une série de lignes /titi/ : toutes les lignes contenant "titi"
* une série utilisant des expressions régulières /^euros/,yens$/ : depuis la première ligne commençant par "euros" jusqu'à la dernière se terminant par "yens"
Prenons le fichier ci-dessous comme exemple :
Prénom,Nom<-tab->12345 test.txt
Bernard, Framboisier 42875 Jean, Corbier 52543 Ariane, Carlettin 35543 Pat, Leguen 23355 2) La substitutions/chainerecherchee/nouvellechaine/g le "/g" sert à remplacer toutes les occurrences de chaque lignes, sans lui, seule la première occurrence de chaque ligne est modifiée.
ex: remplace la première occurrence de chaque ligne de Bernard par Bernardo sed 's/Bernard/Bernardo/' test.txt Bernardo, Framboisier 42875 Jean, Corbier 52543 Ariane, Carlettin 35543 Pat, Leguen 23355
ex: ajoute Tel: devant chaque numéro de téléphone sed '/[0-9]/s//Tel: &/' test.txt Bernard, Framboisier Tel: 42875 Jean, Corbier Tel: 52543 Ariane, Carlettin Tel: 35543 Pat, Leguen Tel: 23355
ex: retire les prénoms de la liste sed 's/^.*, //' test.txt Framboisier 42875 Corbier 52543 Carlettin 35543 Leguen 23355 3) printl'instruction print est utile pour n'imprimer qu'une sélection du fichier.
ex: n'affiche que les lignes contenant "55" sed -n '/55/p' test.txt Ariane, Carlettin 35543 Pat, Leguen 23355 4) La suppressionSELECTIONd ex: supprime les lignes à partir de la 3ème sed '3,$d' test.txt Bernard, Framboisier 42875 Jean, Corbier 52543
ex: supprime toutes les lignes vierge sed '/^$/d' test.txt Bernard, Framboisier 42875 Jean, Corbier 52543 Ariane, Carlettin 35543 Pat, Leguen 23355 5) L'insertion et la modificationSELECTION[i|a|c]\ texte i pour insérer un texte avant la ligne indiquée a pour insérer un texte après la ligne indiquée c pour remplacer un texte à la ligne indiquée
ex: ajoute du texte après la ligne 2 sed '2a\ > test' test.txt Bernard, Framboisier 42875 Jean, Corbier 52543 test Ariane, Carletti 35543 Pat, Leguen 23355
ex: ajoute une ligne blanche après chaque phrase (ponctuée par un retour chariot) sed G test.txt Bernard, Framboisier 42875
Jean, Corbier 52543
Ariane, Carlettin 35543
Pat, Leguen 23355 6) Les instructions multiplesIl est possible d'indiquer plusieurs instructions dès lors que chacune d'entre elles occupe une ligne distincte.
ex: ajoute toto à la fin des lignes commencant par A, B, C ou D et titi à la fin des lignes commencant par une autre lettre sed '/^[A-D]/s/$/ toto / > /^[E-Z]/s/$/ titi /' test.txt Bernard, Framboisier 42875 toto Jean, Corbier 52543 titi Ariane, Carletti 35543 toto Pat, Leguen 23355 titi 7) Les tamponsLa commande sed possède deux espaces tampons qui permettent de stocker du texte : le "pattern space" (= espace de travail) et le "hold space" dans lequel du texte peut être stocké temporairement.
ex: print "1\n2" | sed '/1/{ > h # stocke la ligne sélectionnée dans le hold space > d > } > /2/G' # ligne 2 + hold space 2 1 8) Memento SED Sed | | Commandes | Description | [1] signifie que la commande ne peut être précédée que d’une seule adresse [2] la commande peut être précédée d’un domaine d’adresse : adresse,adresse
| [1]a\ toto | ajoute le texte toto après la ligne indiquée
| | [2]b [étiq] | se branche à l’étiquette etiq ; si l’on ne précise pas d’étiquette, on se branche à la fin du programme | [2]c\ toto | substitue le texte courant par toto | :etiq | définit une étiquette | | [2]d | supprime la ligne | | [2]D | supprime la première ligne du domaine sélectionné | | [2]h | remplace le contenu du hold space par celui du pattern space | | [2]H | ajoute le contenu du hold space à celui du pattern space | | [2]g | remplace le contenu de l’espace du pattern space par le contenu du hold space | | [2]G | ajoute le contenu du pattern space par le contenu du hold space | [1]i\ toto | ajoute le texte toto avant la ligne indiquée | | [2]l | imprime la ligne, en visualisant tous les caractères | | [2]n | imprime la ligne | | [2]N | ajoute les lignes sélectionnées à l’espace des modèles en les séparant d’un saut de ligne | | [2]p | imprime la ligne | | [2]P | imprime la première ligne du texte sélectionné | | [1]q | quitte sed | | [1]r | fichier Lit le fichier et copie son contenu sur la sortie | | [2]s/expreg/chsub/[drapeaux] | substitue la chaîne correspondant à l’expression régulière expreg par la chaîne chsub | Le séparateur / peut être remplacé par un séparateur quelconque. Dans la chaîne ch_sub, le caractère & correspond à la chaîne trouvée. Dans la chaîne ch_sub, l’expression \n correspond à la nième sousexpression \(...\) de l’expression régulière exp_reg. Les drapeaux suivants sont supportés : n Le remplacement porte seulement sur la nième occurrence g Remplace toutes les occurrences de la ligne p Toutes les occurrences sont affichées w fic Ecrit dans le fichier fic les lignes substituées | | [2]t [etiq] | saut à l’étiquette etiq si une substitution a été faite dans la ligne courante | | [2]w nomdefichier | écrit la ligne dans le fichier nomdefichier | | [2]x | permute le pattern space et le hold space | | y/ch1/ch2/ | remplace chaque caractère de ch1 par le caractère correspondant de ch2 | [1]=
| affiche le numéro de la ligne courante
| | [2]!cmd | exécute cmd si la ligne n’est pas sélectionnée | Sed (cas concrets)
| | Commandes | Description | | sed "s/\ \ */\ /g" fichier.in > fichier.out | remplace deux blancs (\<espace>) ou plus par un seul blanc
| sed 's/[ctrl + v][ctrl + m]//g' fichier.in > fichier.out | supprime les retours chariots (^M) venant de fichiers DOS ou mal transférés (binaire / ascii) | | sed "/^$/d" fichier.in > fichier.out | supprimer les lignes vides | sed -n '1,${p;n;}' fichier | affiche une ligne sur deux du fichier fichier | | sed -n \$= fichier | compte le nombre de ligne que contient le fichier fichier (équivalent de wc -l mais sans les espaces générés par le résultat de wc) | sed 's/\/\///g;s/#//g' fichier | supprime les commentaires (# et //) dans le fichier fichier |
[Linux] Création d'un LV et FS ext3 |