sed -e 's/cluster_name: 'Test Cluster'/cluster_name: 'Test Cluster1'/'
Ich habe diese Fehlermeldung:
sed: -e expression, char 20: unterminated `s' command
Wie kann ich den sed-Befehl korrigieren?
$ sed -e "s/cluster_name: 'Test Cluster'/cluster_name: 'Test Cluster1'/"
oder
sed -e 's/cluster_name: '\''Test Cluster'\'\/cluster_name:' '\'Test' 'Cluster1\'/
Das mit allen einfachen Anführungszeichen war schwieriger zu erstellen, ohne dass dieses Programm helfen würde. Wenn Sie Hilfe benötigen, um den Befehl korrekt auszuführen, können Sie ein C-Programm verwenden
$ cat w.c
#include <stdio.h>
int main(int argc, char *argv[]) {
int i = 0;
while (argv[i]) {
printf("argv[%d] = %s\n", i, argv[i]);
i++;
}
return 0;
}
Ich teste von cygwin, aber jede * nix-Shell sollte gleich sein
Sie sehen, dass dies funktioniert
$ ./w sed -e "s/cluster_name: 'Test Cluster'/cluster_name: 'Test Clust
er1'/"
argv[0] = F:\blah\w.exe
argv[1] = sed
argv[2] = -e
argv[3] = s/cluster_name: 'Test Cluster'/cluster_name: 'Test Cluster1'/
$
Wenn Sie es mit dem Verdächtigen versuchen
sed -e 's/cluster_name: \'Test Cluster\'/cluster_name: \'Test Cluster1\'/'
Sie können das Programm verwenden, um den Fehler darin zu finden
Seiner führt nicht einmal aus
$ ./w sed -e 's/cluster_name: \'Test Cluster\'/cluster_name: \'Test C
luster1\'/'
>CTRL-C
Weil es ein einzelnes Zitat fehlt
$ ./w 'fgg
& gt;
unter anderen problemen.
Und wenn man sich den Verdächtigen ansieht, scheitert es schon am Anfang, es bricht auf den Raum
$ ./w sed -e 's/cluster_name: \'Test Clu
argv[0] = f:\blah\w.exe
argv[1] = sed
argv[2] = -e
argv[3] = s/cluster_name: \Test
argv[4] = Clu
Dieser arbeitet
$ ./w sed -e 's/cluster_name: '\''Test Cluster'\'\/cluster_name:' '\'
Test' 'Cluster1\'/
argv[0] = F:\blah\w.exe
argv[1] = sed
argv[2] = -e
argv[3] = s/cluster_name: 'Test Cluster'/cluster_name: 'Test Cluster1'/
Wenn Sie es zusammenstellen, können Sie versuchen, ein Leerzeichen und ein Zeichen hinzuzufügen. Anschließend wird angezeigt, ob der Anführungsmodus aktiviert oder deaktiviert ist. Wenn es deaktiviert ist, wenn Sie ein einzelnes Anführungszeichen verwenden möchten, verwenden Sie \ 'Wenn es aktiviert ist, deaktivieren Sie es mit' dann machen Sie \ ' oder nicht.
Sie müssten den einfachen Anführungszeichen in der Sedierung entgehen
s
Befehl:Das Bearbeiten einzelner Anführungszeichen ist oft schwierig. Wo immer ein einzelnes Anführungszeichen in der Zeichenfolge vorhanden ist, ersetzen Sie es mit
'\''
Ich werde versuchen zu erklären, wie das funktioniert - fühlen Sie sich frei, dies zu verbessern!'\''
- Das erste Zitat endet sed Zeichenfolge und das folgende wird von der Shell analysiert. Der umgekehrte Schrägstrich stellt das folgende Zeichen als einfaches Zeichen dar (und nicht als Metazeichen). Das abschließende Zitat beendet dann den interpretierten Abschnitt für die Bash und das folgende wird von analysiertsed
.quelle
$ echo abc|sed -e 's/cluster_name: '\''Test Cluster'\''/cluster_name: \'Test Cluster1\'/' >CTRL-C
Versuchen Sie es mit meinem