# sed ```bash $ cat test.txt red hat ubuntu mint debian raspbian ``` #### Suppression de ligne: Supprimer la 1ere ligne: ```bash $ sed '1d' test.txt ubuntu mint debian raspbian # le fichier test.txt n'est pas modifié ``` ```bash $ sed -i .bak '1d' test.txt $ cat test.txt ubuntu mint debian raspbian $ cat test.txt.bak red hat ubuntu mint debian raspbian # le fichier test.txt est sauvegardé en test.txt.bak # le fichier test.txt est modifié # Sinon pour masOS $ sed -i '' '1d' test.txt ``` Supprimer la 3eme ligne: ```bash $ sed '3d' test.txt red hat ubuntu debian raspbian ``` Supprimer la dernière ligne: ```bash $ sed '$d' test.txt red hat ubuntu mint debian ``` Supprimer de la 2eme à 4eme ligne: ```bash $ sed '2,4d' test.txt red hat raspbian ``` Supprimer les lignes autres que de la 2eme à 4eme: ```bash $ sed '2,4!d' test.txt ubuntu mint debian ``` Supprimer la 1ere ET la dernière ligne: ```bash $ sed '1d;$d' test.txt ubuntu mint debian ``` Supprimer les lignes commençant par le caractère 'u' ```bash $ sed '/^u/d' test.txt red hat mint debian raspbian ``` Supprimer les lignes se terminant par le caractère 'n' ```bash $ sed '/n$/d' test.txt red hat ubuntu mint ``` Supprimer les lignes se terminant par les caractères 'T', t', 'U' ou 'u' ```bash $ sed '/[TtUu]$/d' test.txt debian raspbian ``` Supprimer les lignes vides: ```bash $ sed '/^$/d' test.txt red hat ubuntu mint debian raspbian ``` Supprimer les lignes contenant l'expression 'red hat': ```bash $ sed '/red hat/d' test.txt ubuntu mint debian raspbian ``` Supprimer les lignes ne contenant pas l'expression 'red hat': ```bash $ sed '/red hat/!d' test.txt red hat ``` Supprimer les lignes contenant les expressions 'ubuntu' OU 'mint': ```bash $ sed '/ubuntu\|mint/d' test.txt red hat ubuntu mint debian raspbian # ne fonctionne pas sous macOS ??? ``` Supprimer de la 1ere ligne à la ligne contenant l'expression 'ubuntu': ```bash $ sed '1,/ubuntu/d' test.txt mint debian raspbian ``` Supprimer de la ligne contenant l'expression 'ubuntu' jusqu'à la dernière ligne: ```bash $ sed '/ubuntu/,$d' test.txt red hat ``` Supprimer la dernière ligne uniquement si elle contient l'expression 'raspbian': ```bash $ sed '${/raspbian/d;}' test.txt red hat ubuntu mint debian ``` Supprimer la dernière ligne uniquement si elle contient les expressions 'raspbian' ou 'debian': ```bash $ sed '${/raspbian\|debian/d;}' test.txt red hat ubuntu mint debian # ne fonctionne pas sous macOS ??? ``` Supprime la ligne contenant l'expression 'debian' uniquement. si elle est présente dans les lignes 1 à 4: ```bash $ sed '1,4{/debian/d;}' test.txt red hat ubuntu mint raspbian ``` Supprime la contenant l'expression 'mint' ET la ligne suivante: ```bash $ sed '/mint/{N;d;}' test.txt red hat ubuntu raspbian ``` Supprime la ligne suivante celle contenant l'expression 'mint': ```bash $ sed '/mint/{N;s/\n.*//;}' test.txt red hat ubuntu mint raspbian ``` Supprime la ligne contenant l'expression 'mint' ET la ligne précédente: ```bash $ sed -n '/mint/{s/.*//;x;d;};x;p;${x;p;}' test.txt | sed '/^$/d' red hat debian raspbian ``` Supprime la ligne précedent celle contenant l'expression 'mint': ```bash $ sed -n '/mint/{x;d;};1h;1!{x;p;};${x;p;}' test.txt red hat mint debian raspbian ``` Supprime la ligne contenant l'expression 'mint', ainsi que la précédente et la suivante: ```bash $ sed -n '/mint/{N;s/.*//;x;d;};x;p;${x;p;}' test.txt | sed '/^$/d' red hat raspbian ``` #### Affichage de ligne: Afficher uniquement la 1ere ligne: ```bash $ sed -n '1p' test.txt red hat ``` Afficher uniquement la 3eme ligne: ```bash $ sed -n '3p' test.txt mint ``` Afficher la dernière ligne: ```bash $ sed -n '$p' test.txt raspbian ``` Afficher les lignes qui ne contiennent pas 'b': ```bash $ sed -n '/b/!p' test.txt red hat mint ``` Afficher les lignes qui contiennent 'h' ou 't': ```bash $ sed -n '/[ht]/p' test.txt red hat ubuntu mint ``` Afficher les lignes se terminant par 'n' ou 'N': ```bash $ sed -n '/[nN]$/p' test.txt debian raspbian ``` Afficher les lignes qui commencent par 'm' ou 'u': ```bash $ sed -n '/^m\|^u/p' test.txt # Ne marche pas sous macOS ??? ``` Afficher 1 ligne sur 2: ```bash $ sed 'n;d' test.txt red hat mint raspbian ``` Afficher les lignes 3 à 5: ```bash $ sed -n '3,5p' test.txt mint debian raspbian ``` #### Supression de caractères: Commande: ```bash $ sed 's/find/replace/' file ``` Supprimer le caractère 'a' ```bash # supprimer le 1er caractère trouvé $ sed 's/a//' test.txt red ht ubuntu mint debin rspbian # supprimer tous les caractères $ sed 's/a//g' test.txt red ht ubuntu mint debin rspbin ``` Supprimer le 1er caractère de chaque ligne: ```bash $ sed 's/^.//' test.txt ed hat buntu int ebian aspbian # autre commande identique $ sed 's/.//' test.txt ``` Supprimer le dernier caractère de chaque ligne: ```bash $ sed 's/.$//' test.txt red ha ubunt min debia raspbia ``` Supprimer les 1er et dernier caractères de chaque ligne: ```bash $ sed 's/.//;s/.$//' test.txt ed ha bunt in ebia aspbia ``` Supprimer le 1er caractère de chaque ligne, mais seulement celui spécifié (ici le 'u'): ```bash $ sed 's/^u//' test.txt red hat buntu mint debian raspbian ``` Supprimer le dernier caractère de chaque ligne, mais seulement celui spécifié (ici le 'u'): ```bash $ sed 's/n$//' test.txt red hat ubuntu mint debia raspbia ``` Supprimer les 3 premiers caractères de chaque ligne: ```bash $ sed 's/...//' test.txt hat ntu t ian pbian ``` Supprimer les n premiers caractères de chaque ligne (ici 3): ```bash $ sed -r 's/.{3}//' test.txt # ne fonctionne pas sous macOS ``` Supprimer les n derniers caractères de chaque ligne (ici 3): ```bash $ sed -r 's/.{3}$//' # ne fonctionne pas sous macOS ``` Tout supprimer sauf les n premiers caractères de chaque ligne (ici 3): ```bash $ sed -r 's/(.{3}).*/\1/' test.txt # ne fonctionne pas sous macOS ``` Tout supprimer sauf les n derniers caractères de chaque ligne (ici 3): ```bash $ sed -r 's/.*(.{3})/\1/' test.txt # ne fonctionne pas sous macOS ``` Supprimer plusieurs caractères (ici toutes les voyelles): ```bash $ sed 's/[aeiou]//g' test.txt rd ht bnt mnt dbn rspbn ``` Supprimer une expression ('bia'): ```bash $ sed 's/bia//g' test.txt red hat ubuntu mint den raspn ``` Supprimer seulement la n ième occurence d'un caractère: ```bash $ sed 's/u//2' test.txt red hat ubntu mint debian raspbian ``` Tout supprimer après le caractère spécifié ('b'): ```bash $ sed 's/b.*//' test.txt red hat u mint de rasp ``` Supprimer tous les nombres: ```bash $ sed 's/[0-9]//g' test.txt ``` Supprimer toutes les minuscules: ```bash $ sed 's/[a-z]//g' test.txt $ # supprime les caractères mais laisse des lignes vides ``` Supprimer tout sauf les minuscules: ```bash $ sed 's/[^a-z]//g' test.txt redhat ubuntu mint debian raspbian ``` Supprimer tous les caractères alpha-numériques: ```bash $ sed 's/[a-zA-Z0-9]//g' test.txt $ # supprime les caractères mais laisse des lignes vides ``` Supprimer minuscule et majuscule d'un caractère: ```bash $ sed 's/[uU]//g' test.txt red hat bnt mint debian raspbian ``` #### Remplacement de caractères: Ajouter une expression en début de ligne: ```bash $ sed 's/^/Distrib: /' test.txt Distrib: red hat Distrib: ubuntu Distrib: mint Distrib: debian Distrib: raspbian ``` Ajouter une expression en fin de ligne: ```bash $ sed 's/$/ Tux ruleeeeez/' test.txt red hat Tux ruleeeeez ubuntu Tux ruleeeeez mint Tux ruleeeeez debian Tux ruleeeeez raspbian Tux ruleeeeez ``` Substituer un caractère (le 1er trouvé de chaque ligne): ```bash $ sed 's/a/A/' test.txt red hAt ubuntu mint debiAn rAspbian ``` Substituer tous les caractères: ```bash $ sed 's/a/A/g' test.txt red hAt ubuntu mint debiAn rAspbiAn ``` Subsituer uniquement la 2nde occurence: ```bash $ sed 's/a/A/2' test.txt red hat ubuntu mint debian raspbiAn ``` Subsituer toutes les occurences à partir de la 2nde: ```bash $ sed 's/u/U/2g' test.txt # ne fonctionne pas sous macOS ``` Substituer uniquement sur le n eme ligne (3eme): ```bash $ sed '3s/n/N/g' test.txt red hat ubuntu miNt debian raspbian ``` Subtituer uniquement de la 3e à la 4e ligne: ```bash $ sed '3,4s/n/N/g' test.txt red hat ubuntu miNt debiaN raspbian ``` Remplacer la ligne entière: ```bash $ sed 's/.*/& is a distrib Linux/' test.txt red hat is a distrib Linux ubuntu is a distrib Linux mint is a distrib Linux debian is a distrib Linux raspbian is a distrib Linux ``` Multiples substitutions: ```bash $ sed 's/a/A/g; s/u/uUu/g' test.txt red hAt uUubuUuntuUu mint debiAn rAspbiAn ``` #### Ajouter une ligne (à voir pour macOS): Ajouter une ligne d'entête: ```bash $ sed '1i Employee, EmpId' test.txt # GNU sed, ne marche pas pour macOS ``` Ajouter '————————' après la ligne d'entête: ```bash $ sed -i '1a ---------------' test.txt ``` Ajouter une ligne tout à la fin: ```bash $ sed -i '$a ---------------' test.txt ``` https://wiki.maxcorp.org/sed/