Ich habe die Datei test_output_archive.svd mit einigen Dollarzeichen ( $
). Ich habe ein Shell-Skript Replace_dollar_pound.sh mit dem Befehl cat generiert, um das Dollarzeichen durch das Pfundzeichen ( £
) zu ersetzen. Das Skript funktioniert unter Solaris 10, der Dollar wird wie erwartet ersetzt. Unter Solaris 11 wird der Dollar jedoch nicht ersetzt und es treten keine Fehler auf.
Inhalt von test_output_archive.svd: Leitungsmiete 9 $ Nur OOB für 10 $
Ersetzen Sie das Dollarzeichen bei Schritt 1 durch das Pfundzeichen, entfernen Sie bei Schritt 2 unbrauchbare Zeichen, entfernen Sie die temporäre Datei bei Schritt 3 und benennen Sie sie bei Schritt 4 um**
Inhalt von Replace_dollar_pound.sh: cat test_output_archive.svd | tr "\044" "\243" > temp_archive.svd cat temp_archive.svd | tr -d "\302" > test_output_archive2.svd rm temp_archive.svd mv test_output_archive2.svd test_output_archive.svd
Müssen irgendwelche Änderungen vorgenommen werden, wenn das Betriebssystem auf Solaris 11 aktualisiert wird?
Antwort1
Das $
hat in regulären Ausdrücken eine besondere Bedeutung, es bedeutet „das Ende des Datensatzes“ (in den meisten Fällen Datensatz==Zeile). Sie müssen es also maskieren. Versuchen Sie Folgendes:
sed 's/\$/£/g' file > outfile
Antwort2
Sie können das Sonderzeichen ($) im sed-Befehl maskieren.
$ cat test.txt
£ pound £
$ dollar $
£ pound £
$ dollar $
$ sed 's/\$/£/g' test.txt
£ pound £
£ dollar £
£ pound £
£ dollar £
Oder alternativ
$ sed 's/[$]/£/g' test.txt
£ pound £
£ dollar £
£ pound £
£ dollar £
Antwort3
Sie können sed
jedes Vorkommen einer Zeichenfolge wie beschrieben ersetzen.Hier:
sed -i 's/\£/\$/g' FILENAME
Die -i
Option gibt an sed
, mit einer Datei zu operieren, s
ist der Operator zum Ersetzen von Zeichenfolgen, \£
ist die Zeichenfolge, die Sie ersetzen müssen, \$
ist die Zeichenfolge, die jedes $
Zeichen ersetzt ( \
die Zeichen werden maskiert, da es sich um Sonderzeichen handelt) und g
bedeutet, dass alle Instanzen ersetzt werden.
BEARBEITEN:Die -i
Option funktioniert nicht unter Solaris. Sie solltenDasProblemumgehung.