Que signifie le caractère #
dans cette ligne:
/bin/sed -e 's#abc#zzz#g'
C'est un séparateur, tout comme "/"
, c'est pareil que 's/abc/zzz/g'
.
cela signifie que la recherche de "abc" le remplace par "zzz", avec un drapeau global, signifie le fait 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 (les) commande (s) 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 expression sed
, ce qui vous évite de nombreuses échappements gênants.
Disons que vous voulez remplacer
https://askubuntu.com/questions
avec
https://askubuntu.com/posts
Vous pourriez utiliser
sed 's/https:\/\/askubuntu.com\/questions/https:\/\/askubuntu.com\/posts/' file
Mais mieux utiliser
sed 's|https://askubuntu.com/questions|https://askubuntu.com/posts|' file