Comment faire correspondre un guillemet simple dans sed si l'expression est entourée de guillemets simples :
sed -e '...'
Par exemple, vous devez faire correspondre ce texte :
'foo'
Comment faire correspondre un guillemet simple dans sed si l'expression est entourée de guillemets simples :
sed -e '...'
Par exemple, vous devez faire correspondre ce texte :
'foo'
Vous pouvez soit utiliser :
"texta'textb" (APOSTROPHE inside QUOTATION MARKs)
ou
'texta'\''textb' (APOSTROPHE text APOSTROPHE, then REVERSE SOLIDUS, APOSTROPHE, then APOSTROPHE more text APOSTROPHE)
J'ai utilisé des noms de caractères unicode. REVERSE SOLIDUS est plus connu sous le nom de backslash.
Dans ce dernier cas, vous fermez votre apostrophe, puis vous la citez avec une barre oblique inverse, puis vous ouvrez une autre apostrophe pour le reste du texte.
Comme indiqué dans les commentaires de la question, il ne s'agit pas vraiment de sed, mais de la façon d'inclure une citation dans une chaîne de caractères citée dans un shell (par exemple bash).
Pour clarifier une réponse précédente, vous devez échapper au guillemet avec une barre oblique inverse, mais vous ne pouvez pas le faire dans une expression à guillemet unique. Extrait de la page de manuel de bash :
Encadrer les caractères entre guillemets simples préserve la valeur littérale de chaque caractère entre guillemets. Un simple ne peut pas se trouver entre des guillemets simples même s'il est précédé d'un barre oblique inversée.
Par conséquent, vous devez terminer l'expression citée, insérer le guillemet échappé et commencer une nouvelle expression citée. La suppression des guillemets par l'interpréteur de commandes n'ajoute pas d'espaces supplémentaires, de sorte que vous obtenez en fait une concaténation de chaînes de caractères.
Ainsi, pour répondre à la question initiale, à savoir comment mettre l'expression "foo" en guillemets, vous devez procéder comme suit :
sed -e '...'\''foo'\''...'
(où '...' est le reste de l'expression sed).
Dans l'ensemble, pour des raisons de lisibilité, il est préférable de remplacer les guillemets par des guillemets doubles, dans la mesure du possible :
sed -e "...'foo'..."
(Pour illustrer le cauchemar potentiel de la première approche (guillemets simples) en matière de maintenance, notez comment la coloration syntaxique de StackOverflow colore les guillemets, les barres obliques inversées et les autres textes - ce n'est absolument pas correct).
Pour sed, une solution très simple consiste à changer le format des guillemets simples en guillemets doubles.
Pour une variable donnée qui contient des guillemets simples
var="I'm a string with a single quote"
Si des guillemets doubles sont utilisés pour sed, cela correspondra au guillemet simple.
echo $var | sed "s/'//g"
Im a string with a single quote
Plutôt que des guillemets simples, qui accrocheront
echo $var | sed 's/'//g'
Vous pouvez également utiliser [']
pour correspondre à un guillemet simple littéral sans avoir besoin de recourir à des astuces de citation de l'interpréteur de commandes.
myvar="stupid computers can't reason about life"
echo "$myvar" | sed -e "s/[']t//"
Sorties :
stupid computers can reason about life
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
L'étiquette [sed] est plus ou moins incorrecte, puisque la question pourrait porter sur awk, par exemple, sans que le contenu en soit modifié. Il devrait s'agir de 'shell', mais je n'ai pas de nouvelle étiquette.
1 votes
@TimB : shell-quoting est un tag complètement nouveau, et redondant puisque "shell", "escaping" sont plus que suffisants. "Escaping" est utilisé depuis des décennies (près de 40 ans) lorsqu'on dépouille des caractères de leur signification particulière dans le shell et la question portait sur l'échappement d'une citation.