Wie ein Apostroph in sed übereinstimmen
Frage
Wie man einen Apostroph in sed anzupassen, wenn der Ausdruck in einfachen Anführungszeichen eingeschlossen ist:
sed -e '...'
Zum Beispiel müssen Sie diesen Text entsprechen:
'foo'
Lösung
Sie können entweder:
"texta'textb" (APOSTROPHE inside QUOTATION MARKs)
oder
'texta'\''textb' (APOSTROPHE text APOSTROPHE, then REVERSE SOLIDUS, APOSTROPHE, then APOSTROPHE more text APOSTROPHE)
Ich verwendete Unicode-Zeichennamen. REVERSE SOLIDUS als Backslash häufiger bekannt.
Im letzteren Fall, schließen Sie Ihre Apostroph, dann Shell-Zitat Ihre Apostroph mit einem umgekehrten Schrägstrich, dann einem anderen Apostroph öffnen für den Rest des Textes.
Andere Tipps
Wie in den Kommentaren auf die Frage erwähnt, ist es nicht wirklich über sed, aber wie ein Zitat in einer Zeichenfolge in Anführungszeichen in einer Shell (z.B. bash).
Um eine frühere Antwort zu klären, müssen Sie das Zitat mit einem Backslash entkommen, aber man kann das nicht innerhalb eines einzigen zitierten Ausdrucks. Von der bash man-Seite:
Enclosing Zeichen in einfachen Anführungszeichen bewahrt den wörtlichen Wert jeden Zeichen in Anführungszeichen. Ein einzelnes Zitat kann nicht auftreten, zwischen den einzelnen Zitate, auch wenn sie von einer voran Backslash.
Sie müssen daher den zitierten Ausdruck beenden, legen Sie die entkam Zitat, und starten Sie einen neuen zitierte Ausdruck. Das Zitat Entfernen des Shell fügt keine zusätzlichen Leerzeichen, so in der Tat Sie String-Verkettung erhalten.
Also, die ursprüngliche Frage zu beantworten, wie der Ausdruck ‚foo‘ Apostroph, würden Sie so etwas tun:
sed -e '...'\''foo'\''...'
(wobei '...' ist der Rest des sed Ausdrucks).
Insgesamt wird aus Gründen der Lesbarkeit, würden Sie viel besser dran Änderung der umgebenden Anführungszeichen doppelte Anführungszeichen, wenn überhaupt möglich:
sed -e "...'foo'..."
[Als Beispiel für den möglichen Wartung Alptraum des ersten (Apostroph) Ansatzes, beachten Sie, wie Stackoverflow Syntax Farben, die Anführungszeichen, Schrägstriche und anderen Text markieren -. Es ist definitiv nicht richtig]