Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT →
Ceci est une ancienne révision du document !
sed [options] commande [fichier...]
ou
sed [options] -f script [fichier...]
options | significations |
---|---|
-e | enchaîner plusieurs commandes |
-r | utiliser les expressions régulières étendues dans un script |
-n | mode silencieux : permet de ne rien modifier associée au drapeau p (print) : affichage sur la sortie standard |
-f | Les commandes sont lues à partir d'un fichier préalablement rédigé. |
-i | Le fichier est édité sur place. |
Dans les exemples qui suivent, ne considérons que la présence ou l'absence de l'optioni
; le reste de la commande est expliqué par la suite.
echo "aaaa BBB cCcC # 12345" >> ~/sed1.txt
sed '' sed1.txt
aaaa BBB cCcC # 12345
sed 's+ +\n+g' ~/sed1.txt
aaaa BBB cCcC # 12345
sed '' sed1.txt
aaaa BBB cCcC # 12345
sed -i.bak
:sed -i.bak 's/sed1.txt//' ~/sed1.txt
sed n'a pas afficher sur la sortie standard le contenu du fichier de sauvegarde.
cat sed1.txt.bak
aaaa BBB cCcC # 12345
sed -i
:sed -i 's+ +\n+g' ~/sed1.txt
cat sed1.txt
aaaa BBB cCcC # 12345
Les options doivent se suivre dans un ordre précis
sed -i -e 's/$/\\n/' ~/sed1.txt
sed -i -e '/^$/d' ~/sed1.txt
s/motif/substitut/ -> si motif = une regex -> alors subtitut = une chaîne de caractère
On peut utiliser la syntaxe habituelle, ou la syntaxe étendue avec l'option-r
.
`-r' `--regexp-extended' Use extended regular expressions rather than basic regular expressions. Extended regexps are those that `egrep' accepts; they can be clearer because they usually have less backslashes, but are a GNU extension and hence scripts that use them are not portable. *Note Extended regular expressions: Extended regexps.
-r
:
Sed couvre des expressions régulières de base (POSIX). Il s'agit des caractères de bases qui sont communs à tous les programmes utilisant les expressions régulières.
En voici un rappel :
*
, ,
, ^
, $
, [ ]
, [^ ]
, \( \)
, \n
, \{n\}
, \{n,m\}
, \{n,\}
.
-r
:
Il s'y ajoute les caractères POSIX étendus :
|
; ^
; $
; .
; *
; +
; ?
; ( )
; [
; { }
; \
; [:alpha:]
, [:blank:]
, [:cntrl:]
, [:digit:]
, [:graph:]
, [:lower:]
, [:print:]
, [:punct:]
, [:space:]
, [:upper:]
, [:xdigit:]
Pour résumer, tous les caractères de ce tableau fonctionnent avec sed -r
: tableau-des-caracteres-utilises-dans-les-expressions-regulieres-etendues
Il s'y ajoute enfin quelques un caractères que l'on retrouve sous Perl :
\b
, \B
, \w
, \W
, \s
, \S
, \`
, \
', \<
, \>
Ainsi que :
\a
(caractère alerte), \f
(saut), \n
(saut de ligne), \r
(retour chariot), \
t (tabulation horizontale), \v
(tabulation verticale), \cx
(Control-x ), \dxxx
(caractère en valeur ascii décimal), \OXXX
(caractère par valeur aSCII octal), \xhh
(caractère par valeur aSCII hexadécimal).
d
commande de suppressionsed '3,4 d' ~/sed1.txt
aaaa BBB 12345
pas d'option : rien n'est modifié
d
: commande de suppression
3,4
: ligne 3 et 4
-e
et répétition le commande d
:sed -e '3d; 4d' ~/sed1.txt
aaaa BBB 12345
/ /
:sed '/^B/d' ~/sed1.txt
aaaa cCcC # 12345
/ /,/ /
:sed '/^B/,/^1/d' ~/sed1.txt
aaaa
s/modèle/remplacement/[drapeau] fichier
ou
cmd | s/modèle/remplacement/[drapeau]
g | global : toutes les occurrences |
1, 2, etc. | un nombre : la nième occurrence |
w | écrire les modifications effectuées dans un fichier |
p | afficher la ligne modifiée |
e | exécution d'une commande |
sed 's/C/c/' ~/sed1.txt
aaaa BBB cccC # 12345
sed 's/C/c/2' ~/sed1.txt
aaaa BBB cCcc # 12345
sed "s/12345/6789/w sed1-modif" ~/sed1.txt
cat ~/sed1.txt
6789
sed 's/C/c/gw modif-sed1.txt' ~/sed1.txt
aaaa BBB cccc # 12345
cccc
Avec l'option-n
pour éviter les doublons, on utilise le drapeau p ;
En effet, on a vu que pour chaque modification, tout le texte est affiché.
drapeau p : il affiche le texte modifié, puis il applique le drapeau, donc affiche ce qui les lignes modifiées.
Grâce-n
, on n'affiche pas ce qui est modifié.
-n
+ drapeau p : on affiche que ce qui a été modifié
sed -n 's/12345/6789/p' ~/sed1.txt
6789
Utilisation de la sortie d'une commande comme chaîne de remplacement.
sed 's/^#/date/e' ~/sed1.txt
cat ~/sed1.txt
6789 aaaa BBB cCcC mardi 15 juillet 2014, 11:48:27 (UTC+0200) 12345
VAR="coucou"
export VAR
sed 's/^#/echo '$VAR'/e' ~/sed1.txt
aaaa BBB cCcC coucou 12345
d | supprimer |
q | quitter |
p | afficher avec -n |
i\texte | insérer du texte |
a\texte | ajouter du texte |
c\texte | remplacer du texte |
= | afficher |