Continuer à utiliser sed
Cet article est maintenant sur http://linux-attitude.fr/post/Continuer-a-utiliser-sed
Niveau:

Résumé : sed
Dans un récent article, je vous conseillais d'utiliser perl pour ne pas avoir à apprendre la syntaxe des autres outils. Oui, mais sed est bien supérieur à perl pour certaines utilisations. Par conséquent il est tout de même bon de connaître quelques idiomes sed.
Ceci est une sélection d'unilignes en provenance de http://www.student.northpark.edu/pemente/sed/sed1line.txt
Cherchez les équivalents perl, vous constaterez qu'ils sont souvent plus longs si ce n'est plus lents.
Commençons par ceux qui vous seront le plus souvent utiles :
La suite vous sera plus rarement utile, mais vous permettra de comprendre le fonctionnement de sed et donc de créer des fonctions bien plus complexes.
Niveau:
Résumé : sed
Dans un récent article, je vous conseillais d'utiliser perl pour ne pas avoir à apprendre la syntaxe des autres outils. Oui, mais sed est bien supérieur à perl pour certaines utilisations. Par conséquent il est tout de même bon de connaître quelques idiomes sed.
Ceci est une sélection d'unilignes en provenance de http://www.student.northpark.edu/pemente/sed/sed1line.txt
Cherchez les équivalents perl, vous constaterez qu'ils sont souvent plus longs si ce n'est plus lents.
Commençons par ceux qui vous seront le plus souvent utiles :
# remplace toto par tata dans toutes les lignes contenant titi
$ sed '/titi/s/toto/tata/g'
# remplace toto par tata dans toutes les lignes ne contenant pas titi
$ sed '/titi/!s/toto/tata/g'
# imprime les 10 premières lignes, comme le ferait head (utile pour comprendre la suite)
$ sed 10q
# imprimes toutes les lignes sauf celles entre "tata" et "toto"
$ sed '/tata/,/toto/d'
# imprime la ligne 52
$ sed -n '52p' # méthode 1
$ sed '52!d' # méthode 2
$ sed '52q;d' # méthode 3, arrête la lecture dès qu'elle a matché
# supprime les 10 premières lignes
$ sed '1,10d'
# imprime les 10 dernières lignes, comme le ferait tail (plus difficile)
$ sed -e :a -e '$q;N;11,$D;ba'
$ sed '/titi/s/toto/tata/g'
# remplace toto par tata dans toutes les lignes ne contenant pas titi
$ sed '/titi/!s/toto/tata/g'
# imprime les 10 premières lignes, comme le ferait head (utile pour comprendre la suite)
$ sed 10q
# imprimes toutes les lignes sauf celles entre "tata" et "toto"
$ sed '/tata/,/toto/d'
# imprime la ligne 52
$ sed -n '52p' # méthode 1
$ sed '52!d' # méthode 2
$ sed '52q;d' # méthode 3, arrête la lecture dès qu'elle a matché
# supprime les 10 premières lignes
$ sed '1,10d'
# imprime les 10 dernières lignes, comme le ferait tail (plus difficile)
$ sed -e :a -e '$q;N;11,$D;ba'
La suite vous sera plus rarement utile, mais vous permettra de comprendre le fonctionnement de sed et donc de créer des fonctions bien plus complexes.
# imprime les 2 dernières lignes ("tail -2")
$ sed '$!N;$!D'
# imprime les lignes qui matchent (grep)
$ sed -n '/regexp/p' # méthode 1
$ sed '/regexp/!d' # méthode 2
# imprime les lignes qui ne matchent pas (grep -v)
$ sed -n '/regexp/!p' # méthode 1
$ sed '/regexp/d' # méthode 2
# imprime la ligne précédant le match
$ sed -n '/regexp/{g;1!p;};h'
# imprime la ligne succédant au match
$ sed -n '/regexp/{n;p;}'
# imprime une ligne sur 7 à partir de la 3e
$ gsed -n '3~7p' # GNU sed only
$ sed -n '3,${p;n;n;n;n;n;n;}' # other seds
# supprime les 10 dernières lignes
$ sed -e :a -e '$d;N;2,10ba' -e 'P;D' # méthode 1
$ sed -n -e :a -e '1,10!{P;N;D;};N;ba' # méthode 2
$ sed '$!N;$!D'
# imprime les lignes qui matchent (grep)
$ sed -n '/regexp/p' # méthode 1
$ sed '/regexp/!d' # méthode 2
# imprime les lignes qui ne matchent pas (grep -v)
$ sed -n '/regexp/!p' # méthode 1
$ sed '/regexp/d' # méthode 2
# imprime la ligne précédant le match
$ sed -n '/regexp/{g;1!p;};h'
# imprime la ligne succédant au match
$ sed -n '/regexp/{n;p;}'
# imprime une ligne sur 7 à partir de la 3e
$ gsed -n '3~7p' # GNU sed only
$ sed -n '3,${p;n;n;n;n;n;n;}' # other seds
# supprime les 10 dernières lignes
$ sed -e :a -e '$d;N;2,10ba' -e 'P;D' # méthode 1
$ sed -n -e :a -e '1,10!{P;N;D;};N;ba' # méthode 2
Publicité