====== sed ====== ---- ===== Syntaxe de base ===== sed [-n] action [fichier1 fichier2 ... fichierx] sed [-n] -e action1 [-e action2 ...] [fichier1 fichier2 ... fichierx] sed -f script-sed [fichier1 fichier2 ... fichierx] | -n | écrit seulement les lignes spécifiées sur la sortie standard | | -e | permet de spécifier les commandes à appliquer sur le fichier | | -f | les commandes sont lu à partir d'un fichier | | -i[SUFFIX] | modifie directement le fichier (avec une sauvegarde si SUFFIX est ajouté) | | -r | syntaxe étendue pour les expressions régulières | La commande sed ne modifie pas le fichier d'origine sauf si elle est exécutée avec l'option -i. ---- [[all:bibles:linux:commandes:sed|Haut de page]] ===== Syntaxe d'une action ===== [adresse[,adresse]] commande [arguments] Une action est syntaxiquement composée de : * Une partie adresse qui permet de spécifier sur quelles lignes doit s'effectuer la commande. * La commande à exécuter. * Les arguments de la commande. ==== Syntaxe d'une adresse ==== | | toutes les lignes | | num | la ligne num (la dernière ligne est référencée par $) | | num1,num2 | de la ligne num1 à la ligne num2 | | /REG/ | les lignes correspondant à l'expression régulière REG | | /REG1,REG2/ | les lignes entre la première ligne correspondant à l'expression régulière REG1 et la première ligne correspondant à l'expression régulière REG2 | ==== Syntaxe de la commande ==== ^ Commande ^ Argument ^ Action ^ | d | Aucun | Ne pas afficher les lignes spécifiées (delete). | | p | Aucun | Afficher les lignes spécifiées (print). | | s | /REG/remplacement/[g] | Effectuer une substitution sur les lignes spécifiées (substitute). Le caractère optionnel "g" indique si la substitution doit être globale sur les lignes. | | w | fichier | Ecrire les lignes spécifiées dans un fichier (write). | | = | Aucun | Afficher le numéro de la ligne spécifiée. | | a | texte | Ajouter les lignes de texte après chaque ligne spécifiée (add). | | i | texte | Insérer les lignes de texte avant chaque ligne spécifiée (insert). | | c | texte | Remplacer les ligne spécifiées par les lignes de texte (change). | === Négation de commande === | ! | La commande s'exécutera sur toutes les lignes sauf celles spécifiées dans l'adresse. | ---- ===== Exemples ===== ==== Suppression ==== === suppression de lignes === sed '1d;4d' fichier.txt # supprime les lignes 1 et 4 du fichier sed '1,4d' fichier.txt # supprime les lignes 1 à 4 du fichier === suppression de lignes selon expression régulière === sed '/^#/d' fichier.txt # supprime les lignes qui commencent par un commentaire sed "/^#/!d" fichier.txt # supprime tout sauf les ligne qui commencent par un commentaire, donc affiche toutes les lignes commençant par un # sed '/^#/d;/_/d' fichier.txt # supprime les lignes entre une ligne commençant par # et une ligne comportant un _ === combinaison des 2 === sed '1d;/^#/d' fichier.txt # suppression de la première ligne et de toutes les lignes qui commencent par un commentaire ==== Filtrage ==== sed -n '/^#/p' fichier.txt # on n'affiche que les lignes qui commencent par # sed -n 5p fichier.txt # on n'affiche que la ligne 5 sed -n 5,10p fichier.txt # on affiche de la ligne 5 à la ligne 10 ==== Substitution ==== sed 's/truc/machin/' fichier.txt # remplace truc par machin sed "s/[Cc]omputer/COMPUTER/g" fichier.txt # remplace computer et Computer par COMPUTER sed -e "s/\([0-9][0-9]*\)/**\1**/" fichier.txt # encadre le premier nombre de la ligne avec des ** sed -z 's/\n/ /g' fichier.txt # supprime les retours à la ligne ==== Translitération ==== sed 'y/éèêë/eeee/' fichier .txt # remplace les e accentués par un e simple ==== Commandes groupés ==== sed '2,6 {y/éèê/eee/;s/truc/machin/g}' fichier.txt # remplace les e accentués et truc par machin sur les lignes 2 à 6 sed '/^#/ {y/éèê/eee/;s/truc/machin/g}' fichier.txt # remplace les e accentués et truc par machin sur les lignes qui commencent par un # ==== Divers ==== sed -n "/\./=" fichier.txt # affiche les numéros des lignes comportant un . sed -e "/\./=" -e "/[A-Z]/w capitale" fichier.txt # idem et écrit dans le fichier capitale toutes les lignes qui ont une majuscule ---- [[all:bibles:linux:commandes:sed|Haut de page]]