![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
sed peut s'utiliser en multilignes.
Ceci est un texte d'essai. Il est à utiliser pour des tests.
sed -n 's/a/A/g s/e/E/g s/o/O/g'> > < text.txt CEci Est un tExtE d'EssAi. Il Est à utilisEr pOur dEs tEsts.
sed peut s'utiliser avec un autre caractère que , par exemple : , &, @ ou # pourvu que vous n'ayez pas ce caractère dans la ligne.
sed 's:à:A:g' < text.txt Ceci est un texte d'essai. Il est A utiliser pour des tests. sed 's#e#E#g' < text.txt CEci Est un tExtE d'Essai. Il Est à utilisEr pour dEs tEsts.
sed peut servir d'interpreteur de script et on peut ecrire un fichier transform
#!/bin/sed -f s/a/A/g s/e/E/g s/i/I/g s/o/O/g s/u/U/g
et executer celui-si
transform text.txt
On peut même passer un argument au script. Si on crée un fichier sedgrep et qu'on le rend executable on peut taper:
#!/bin/sh sed -n 's/'"$1"'/&/p'
./sedgrep sed < sedgrep sed -n 's/'"$1"'/&/p'
sed peut servir de here document avec substitution, même si cat le fait aussi bien
value=3 sed 's/X/'$value'/' <EOF la valeur est 3
: label | label |
# commentaire | commentaire |
{ ... } | défini un bloc |
= | affiche les numéros de lignes |
a \ | ajoute du texte |
c\ | change |
d ou D | supprime |
i\ | insère |
p ou P | affiche |
q | quitter |
x | échange |
s/.../.../ | substitue |
y/.../.../ | transforme |
g ou G | get |
h ou H | hold |
n ou N | next |
b label | va jusqu'au label |
t label | test et va jusqu'au label |
r filename | lit un fichier |
w filename | écrit un fichier |
/string/ | recherche une chaine | sed -n '/Jean/ p' text.txt |
/debut/,/fin/ | recherche d'un bloc de texte entre 2 marqueurs | sed -n '/est/,/oui/p' text.txt |
num_ligne | affiche la ligne | sed -n '1p' text.txt |
de,a | affiche entre les lignes | sed -n '1,3p' text.txt |
caractères | signification |
^ | début de ligne |
$ | fin de ligne |
1 | début de fichier |
$ | fin de fichier |
Pour n'afficher que la première ligne on supprime tout de la 2 eme ligne à la fin ($).
sed '2,$d' fichier
/g | substitusion générale répétée |
/I | ignore case |
/P | print affiche |
/w filename | écrit le fichier |
-n | supprime l'affichage |
-u | supprime le buffering |
-e script | utilise la variable script |
-f script | utilise le fichier script |
s/\(.*\):\(.*\) | afficher la dernière colonne d'un fichier séparé par de la caractère : |
s/\(.*\) \(.*\) \(.*\)/ \1 \2 \3 | rechercher 3 mots séparés par des espaces et les met dans l'ordre |
s/\(.*\) \(.*\) \(.*\)/ \1 \2 \3 | rechercher 3 mots séparés par des espaces et les inverses |
s/\(.*\) \(.*\) \(.*\) (.*\) \(.*\) \(.*\)/\4 | ne garder que le quatrième |
s/\(.*\) \(.*\) \(.*\) \(.*\) \(.*\) \(.*\)/[\3]/ | ne garder que le troisème entre crocher |
s/\(.*\)=\(.*\)/\2/ | afficher la valeur correspondant à une affectation ( caractère =) |
s/\(.*\)=\(.*\)/\2 \2/ | afficher plusieures fois la même valeur |
s/.*FREE PPs:.*(\([0-9][0-9]*\) megabytes.*/\1/p | expression régulière cherchant la valeur entre FREE PPS et megabytes |
/^$/d | supprimer une ligne vide |
/^#/d | supprimer une ligne commençant par un commentaire |
1,8d | supprimer les lignes 1 à 8 |
s/windows/linux/ | remplacer windows par linux pour la première instance trouvée |
s/windows/linux/g | remplacer tous les windows par linux |
s/from/to/3 | remplacer la troisème occurence de from |
/line/s/from/to/g | remplacer from par to pour toutes les lignes qui contiennent line |
/line/s!/from/to/g | remplacer from par to pour toutes les lignes qui ne contiennent pas line |
s/from/to/g; s/from2/to2/g | multi remplacment |
/john/ | n'afficher que les lignes contenant john |
/doe/d | supprime toutes les lignes contennat doe |
s/ *$// | supprimer tous les espaces en fin de ligne |
s/00*/0/g | compresse tous les 0 trouvées par un seul zéro |
s/ */ /g | réduire les espaces entre chaine à un seul blanc |
s/mot//g | supprime tous les mots mot |
/WORD/ a\ traduction mot | ajoute une ligne après chaque mot trouvé WORD |
/WORD/ i\ traduction mot | ajoute une ligne avant chaque mot trouvé WORD |
1i\ > entete | ajouter une ligne en entete |
1a\ > entete | ajouter une ligne après la première ligne |
/pattern/G | insèrer une ligne blanche après le pattern quand il est trouvé |
1!G;h;$!d | afficher le texte à l'envers |
$!N;s/\n/ / | joindre les lignes deux à deux |
q | afficher la première ligne du fichier |
10q " afficher les 10 premières lignes | |
$!D | afficher la dernière ligne d'un fichier |
$!N;$!D | afficher les 2 dernières lignes d'un fichier |
/pattern/p | afficher les lignes qui correspondent au pattern |
/pattern/!d | afficher les lignes qui correspondent au pattern |
/AAA/!d; /BBB/!d; /CCC/!d | grep pour 3 patterns dans n'importe quel ordre |
Le fichier de test text.txt contient le texte suivant et sera utilisé pour nos exemples.
Ceci est un texte d'essai. Il est à utiliser pour des tests. Jean-Louis
recherche d'un pattern donné (grep)
sed -n 's/est/&/p' text.txt Ceci est un texte d'essai. Il est à utiliser pour des tests. sed -n 's/toto/&/p' < text.txt sed -n 's/est/&/p' < text.txt Ceci est un texte d'essai. Il est à utiliser pour des test
On remarque que l'indirection n'est pas utile.
Pour ne conserver qu'un seul blanc entre les mots.
echo "Un phrase avec des blancs." | sed "s/ */ /g" Un phrase avec des blancs.
On peut faire de même avec l'option p:
sed -n '/Jean/ p' text.txt Jean-Louis
On peut afficher le texte compris entre un marqueur de début et fin.
sed -n '/est/,/oui/p' text.txt Ceci est un texte d'essai. Il est à utiliser pour des tests. Jean-Louis
compter le nombre de lignes (wc -l)
sed -n '$=' text.txt 2
afficher les lignes avec leur numéros
#sed '=' text.txt 1 Ceci est un texte d'essai. Il est à utiliser pour des tests. 2 Jean-Louis
supprimer toutes les lignes de 2 à 10
sed '2,10/ d' sed '2,10!p'
supprimer toutes les lignes vides
sed '/^$/ d'
faire un head
pour faire un head -n 10 on émule la commande en supprimant les lignes husqu'à la fin du fichier à partir de la ligne 11.
sed '11,$d'
Avec i on peut ajouter une ou plusieures lignes à la suite d'une ligne donnée. Il faut terminer les lignes à ajouter par le caractère \.
sed '1i\ =========================\ programme\ =========================' test ========================= programme ========================= if ! test \( -n $1 \) -a \( -e $1 \) ; then echo "erreur" fi
Avec i on insère avant la ligne souhaitée.
Avec a on insère après la ligne souhaitée.
changer une ligne de texte lorsqu'on rencontre un modif
sed '/Jean-Louis/ c\ signature' text.txt Ceci est un texte d'essai. Il est à utiliser pour des tests. signature
ou a une ligne donnée
sed '1 c\ entete ' text.txt entete Jean-Louis
On va utiliser un fichier test.txt.
nom: john nom: doe nom: alpha
Pour afficher le fichier en le numérotant cadré à droite:
#sed = test.txt | sed 'N; s/^/ /; s/ *\(.\{6,\}\)\n/\1 /' 1 nom: 2 john 3 nom: 4 doe 5 nom: 6 alpha
Pour afficher le fichier en le numérotant cadré à gauche:
#sed = test.txt | sed 'N;s/\n/ /' 1 nom: 2 john 3 nom: 4 doe 5 nom: 6 alpha
Pour ne numéroter que les lignes non vides:
#sed '/./=' test.txt | sed '/./N; s/\n/ /' 1 nom: 2 john 4 nom: 5 doe 7 nom: 8 alpha
différentes manières de joindre les lignes:
Pour joindre les ligne deux à deux
sed '$!N;s/\n/ /' test.txt nom: john nom:doe nom: alpha
Pour joindre les lignes qui se perminent par le caractère ::
#sed -e :a -e '/:$/N; s/:\n/:/; ta' test.txt nom:john nom:doe nom:alpha
Pour joindre les lignes qui se terminent par \
#sed -e :a -e '/\\$/N; s/\\\n//; ta' test.txt nom: john nom: doe nom: alpha
ajoute des points toutes les 3 décimales
Cela permet typiquement de formater les grands nombres au format français avec . ou anglais ,.
#echo 54457772 |sed -e :a -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/\1.\2/;ta' 54.457.772
mettre en forme la date ou extraire l'heure
# date |sed 's/\(.*\) \(.*\) \(.*\) \(.*\) \(.*\) \(.*\)/\3 \2 \6/' 16 Dec 2014 # date |sed 's/\(.*\) \(.*\) \(.*\) \(.*\) \(.*\) \(.*\)/ \4/' 15:00:50
inverser deux mots
#echo "john est" | sed 's/\(.*\) \(.*\)/\2 \1/' est john
pour extraire une valeur
#echo "john=10" | sed 's/\(.*\)=\(.*\)/\2/' 10 #echo "john=10" | sed '/john/!p' | sed 's/\(.*\)=\(.*\)/\2/' 10
pour extraire la taille total ou l'espace libre d'un VG
lsvg rootvg | sed -n 's/.*FREE PPs:.*(\([0-9][0-9]*\) megabytes.*/\1/p' 704 lsvg rootvg | sed -n 's/.*TOTAL PPs:.*(\([0-9][0-9]*\) megabytes.*/\1/p' 17024
afficher les 5 dernières lignes d'un fichier (tail -n 5)
#sed -e :a -e '$q;N;6,$D;ba' test.txt nom: doe nom: alpha
Suppression des tags htmls (html2txt)
#sed -e 's/<[^>]*>//g'
unix2dos
#sed 's/$/^M/' test.txt
dos2unix
#sed 's/\(.*\)..$/\1/' test.txt
Attention, cette commande est à utiliser avec précaution.