Beantwortung vondiese Frage:
sed
Bei der Version 4.2.2 habe ich folgende Situation festgestellt .
Aus dieser Eingabe:
send host-name = gethostname();
domain-name, domain-name-servers, domain-search, host-name,
# option host-name "andare.swiftmedia.com";
Ich möchte die Zeichenfolge „Hostname“ nur aus der zweiten Zeile entfernen, daher lautet die erwartete Ausgabe:
send host-name = gethostname();
domain-name, domain-name-servers, domain-search,
# option host-name "andare.swiftmedia.com";
Dann habe ich den folgenden Befehl verwendet:
sed -e 's/" host-name,"//g' input_file
Allerdings wird die Zeichenfolge „Hostname“ aus der Eingabedatei nicht entfernt und bleibt unverändert.
Wenn ich keine doppelten Anführungszeichen verwende:
sed -e 's/ host-name,//g' input_file
Es liefert genau das erwartete Ergebnis.
Ich dachte, die korrekte Vorgehensweise wäre die Verwendung von doppelten Anführungszeichen, kann mir aber nicht erklären, warum das hier nicht funktioniert.
Antwort1
Der Charakter "
der Schale im Inneren ist nicht speziell '
... '
Tatsächlich ist sie im Inneren '
...'
kein Charakter ist etwas Besonderesfür die Shell; daher "
werden die Zeichen an übergeben sed
; und sie sind für nichts Spezielles sed
.
Der Befehl sed -e 's/" host-name,"//g'
sucht buchstäblich nach "
h
o
s
t
n
a
m
e
,
"
, wird aber nicht gefunden, weil es nicht vorhanden ist.