Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| linux:sed [15-02-2013 10:04] – edmc73 | linux:sed [04-10-2020 10:00] (Version actuelle) – [Remplacement / substitution] edmc73 | ||
|---|---|---|---|
| Ligne 3: | Ligne 3: | ||
| ===== Description ===== | ===== Description ===== | ||
| **sed** est un outils très puissant permettant de transformer le texte du flux entrant. | **sed** est un outils très puissant permettant de transformer le texte du flux entrant. | ||
| + | |||
| + | Doc très détaillé : | ||
| + | * http:// | ||
| + | * http:// | ||
| + | |||
| ===== Exemples ===== | ===== Exemples ===== | ||
| Ligne 12: | Ligne 17: | ||
| tata 4321 toto tutu | tata 4321 toto tutu | ||
| </ | </ | ||
| + | |||
| + | L' | ||
| Pour remplacer | Pour remplacer | ||
| - | sed -e ' | + | sed -i ' |
| < | < | ||
| Ligne 21: | Ligne 28: | ||
| </ | </ | ||
| - | On peut remarquer que seul la 1ère occurence | + | On peut remarquer que seule la 1ère occurrence |
| - | sed -e ' | + | sed -i ' |
| < | < | ||
| koko 1234 koko titi | koko 1234 koko titi | ||
| Ligne 28: | Ligne 35: | ||
| </ | </ | ||
| + | Pour ignorer la casse, on utilise l' | ||
| + | sed -i ' | ||
| + | |||
| + | Remplacer un \ par / dans les path des #include dans un fichier .c | ||
| + | sed -i '/# | ||
| + | sed -i '/# | ||
| + | sed -i '/# | ||
| + | | ||
| + | Pour remplacer dans l' | ||
| + | |||
| + | find . -name ' | ||
| + | et inversement | ||
| + | find . -name ' | ||
| ==== Translittération ==== | ==== Translittération ==== | ||
| Pratique pour par exemple remplacer tous les e avec accent par un e sans accent. | Pratique pour par exemple remplacer tous les e avec accent par un e sans accent. | ||
| Ligne 36: | Ligne 56: | ||
| | | ||
| ==== Suppression ==== | ==== Suppression ==== | ||
| + | Pour supprimer la 1ère ligne d'un fichier | ||
| + | sed -e ' | ||
| + | Pour supprimer toutes les lignes sauf la 1ère | ||
| + | sed -e ' | ||
| + | Pour supprimer les lignes de 3 à 7 | ||
| + | sed -e ' | ||
| + | Pour n' | ||
| + | sed -e ' | ||
| + | |||
| Pour supprimer toutes les lignes de commentaire qui commence par exemple par **#**, on utilise l' | Pour supprimer toutes les lignes de commentaire qui commence par exemple par **#**, on utilise l' | ||
| sed -e '/ | sed -e '/ | ||
| + | A contrario, si nous voulons que les lignes qui commencent par un #, on ajoute un **!** devans l' | ||
| + | sed -e '/ | ||
| + | | ||
| Exemple avec un fichier de conf qui comporte des lignes commentés avec un **;** et qui comportent beaucoup de lignes vide. | Exemple avec un fichier de conf qui comporte des lignes commentés avec un **;** et qui comportent beaucoup de lignes vide. | ||
| sed -e '/ | sed -e '/ | ||
| Avec les **[ ]** et spécifie que la ligne commente par un **#** ou un **;**. Le **;** suivant veut dire que nous lançons une autre commande, celle ci dit que nous cherchons une ligne vide. **^** indique le début de la ligne et **$** la fin. **/d** on delete. | Avec les **[ ]** et spécifie que la ligne commente par un **#** ou un **;**. Le **;** suivant veut dire que nous lançons une autre commande, celle ci dit que nous cherchons une ligne vide. **^** indique le début de la ligne et **$** la fin. **/d** on delete. | ||
| + | Supprimer les lignes qui contient un message d' | ||
| + | sed -e '/HTTP accept: Too many open files/ | ||
| + | Éliminer les espaces et tabulations | ||
| + | En début de ligne | ||
| + | sed 's/^[ \t]*// | ||
| + | sed ' | ||
| | | ||
| + | En fin de ligne | ||
| + | sed 's/[ \t]*$//' | ||
| + | | ||
| + | En début et fin de ligne | ||
| + | sed 's/^[ \t]*//;s/[ \t]*$//' | ||
| + | ==== Expressions régulières ==== | ||
| + | Prenons le cas de la commande **df** qui permet d' | ||
| + | |||
| + | Nous devons travailler sur ce genre de donnée: | ||
| + | < | ||
| + | Sys. de fichiers | ||
| + | / | ||
| + | tmpfs 4099408 | ||
| + | udev | ||
| + | tmpfs 4099408 | ||
| + | </ | ||
| + | On va imaginer un découpage basic de la sorte | ||
| + | champ1 champ2 champ3 champ4 champ5 champ6 | ||
| + | Un champ est zéro ou plusieurs n' | ||
| + | .* .* .* .* .* .* | ||
| + | Comme on veut pouvoir récupérer ces champs, on va les mettre entre parenthèses mais pour que sed ne croit pas que l'on cherche des parenthèses, | ||
| + | \(.*\) \(.*\) \(.*\) \(.*\) \(.*\) \(.*\) | ||
| + | Maintenant entre chaque champ nous avons un ou plusieurs espaces, ou pourrait écrire l' | ||
| + | Il faudrait ruser en écrivant ceci [: | ||
| + | |||
| + | Nous allons faire plus simple en lançant une première commande permettant de remplacer toutes les suites d' | ||
| + | sed -e 's/[ ][ ]*/ /g' | ||
| + | On obtient au final la commande | ||
| + | df | sed -e 's/[ ][ ]*/ /g' -e ' | ||
| + | |||
| + | Si on voulait ne récupérer que le pourcentage d' | ||
| + | df | sed -e ' | ||
| + | Ici on a rajouté **1d** qui permet de supprimer la 1ère ligne. | ||
| + | |||
| + | ===== Exemple en vrac ===== | ||
| + | |||
| + | Source | ||
| + | < | ||
| + | dublablacodecode< | ||
| + | |||
| + | Résultat | ||
| + | < | ||
| + | fichier2.xyz</ | ||
| + | |||
| + | Sed | ||
| + | < | ||
| + | |||
| + | ==== Extraire la date et la reformaté dans un nom de fichier ==== | ||
| + | |||
| + | | ||
| + | $ echo Pict_20140215_0945.jpg | sed -r ' | ||
| + | 15-02-2014 09:45 | ||
| + | |||
| + | ==== Extraire la valeur d'un test avec hdparm ==== | ||
| + | On veut récupérer la valeur 64.66 | ||
| + | < | ||
| + | |||
| + | /dev/sda: | ||
| + | | ||
| + | |||
| + | hdparm -t /dev/sda | sed -r '/ | ||
| + | | ||
| + | Avec le ''/ | ||
| + | '' | ||
| + | On prend la valeur jusqu' | ||
| + | |||
| + | |||
| + | ==== Connaitre les machines connectées à notre serveur NFS ==== | ||
| + | |||
| + | < | ||
| + | |||
| + | |||
| + | |||
| + | ===== Regexp extended ===== | ||
| + | |||
| + | On peut mettre l' | ||
| + | |||
| + | > | ||
| + | > | ||
| + | >The only difference between basic and extended regular expressions is in the behavior of a few characters: ‘?’, ‘+’, parentheses, | ||
| + | > | ||
| + | > | ||
| + | > | ||
| + | >abc? -> ‘abc\?’ when using extended regular expressions. It matches the literal string ‘abc? | ||
| + | >c\+ -> ‘c+’ when using extended regular expressions. It matches one or more ‘c’s. | ||
| + | >a\{3,\} -> ‘a{3,}’ when using extended regular expressions. It matches three or more ‘a’s. | ||
| + | > | ||
| + | > | ||
| + | |||
| + | |||