Que signifie le #
caractère dans cette ligne:
/bin/sed -e 's#abc#zzz#g'
la source
Que signifie le #
caractère dans cette ligne:
/bin/sed -e 's#abc#zzz#g'
C'est un séparateur, tout comme "/"
, c'est la même chose que 's/abc/zzz/g'
.
cela signifie rechercher "abc" le remplacer par "zzz", avec le drapeau global, signifie le faire pour tous les "abc" sur la ligne, pas seulement le premier.
Vous pouvez également utiliser un séparateur alternatif pour une adresse de modèle, mais dans ce cas, vous devez l'échapper pour qu'elle soit correctement interprétée:
sed -r '\#abc#p'
C'est un délimiteur ou un séparateur. Le plus couramment utilisé est /
comme dans
sed 's/old/new/' file
Mais sed prendra le premier caractère après la ou les commandes comme délimiteur. Vous pouvez utiliser n'importe quel caractère pratique, par exemple ...
sed 's%old%new%' file
Ceci est très utile si le fichier contient /
(ou d'autres caractères de délimitation conventionnels). Vous pouvez choisir comme séparateur un caractère que vous savez que vous n'aurez pas besoin de mettre dans votre sed
expression, vous évitant ainsi de vous échapper énormément.
Disons que vous voulez remplacer
/ubuntu//questions
avec
/ubuntu//posts
Vous pourriez utiliser
sed 's/https:\/\/askubuntu.com\/questions/https:\/\/askubuntu.com\/posts/' file
Mais mieux utiliser
sed 's|/ubuntu//questions|/ubuntu//posts|' file
/
peut être remplacé par un caractère alternatif dans des contextes autres que las
commande (substitut) - mais dans ce cas, il doit être échappé la première fois, par exemplesed '/foo/d'
(supprimer les lignes correspondantfoo
) devientsed '\#foo#d'
sbabeb
fait la même chose ques/a/e/
.