Que signifie le caractère # dans: / bin / sed -e # abc # zzz # g '?

10

Que signifie le #caractère dans cette ligne:

/bin/sed -e 's#abc#zzz#g'
Khalith Basha
la source

Réponses:

14

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'
Ravexina
la source
24

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 sedexpression, 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
Zanna
la source
Il peut être intéressant de noter qu'au moins dans GNU sed, /peut être remplacé par un caractère alternatif dans des contextes autres que la scommande (substitut) - mais dans ce cas, il doit être échappé la première fois, par exemple sed '/foo/d'(supprimer les lignes correspondant foo) devientsed '\#foo#d'
steeldriver
@steeldriver en effet! - J'ai vu que Ravexina a ajouté cela à sa réponse, alors je vais peut-être laisser le mien :)
Zanna
1
Il n'est pas important que le flux contienne le caractère séparateur. L'important est de savoir si la chaîne de recherche ou la chaîne de remplacement contient le caractère séparateur.
kasperd
@kasperd oh oui, c'est vrai. J'ai légèrement modifié :)
Zanna
@ La réponse de Zanna est plus pertinente: le premier caractère après la commande "s" détermine le séparateur utilisé dans cette commande. Vous pouvez utiliser n'importe quel caractère ici. sbabebfait la même chose que s/a/e/.
rexkogitans