Ich bin im Verzeichnis mit Dateien, die aus vielen Zeilen bestehen:
%Vor%und dann eine Zeile, die endet:
%Vor% Ich versuche, :(float)
aus jeder Datei zu entfernen (aber lasse die Nummer) und entferne auch diese Bereinigung ... Zeile.
Ich kann bekommen:
%Vor%funktioniert, aber das erzeugt Dateien, die die alten Dateien behalten. Das Entfernen des -e-Flags führt zu einem nicht abgeschlossenen Ersatzmusterfehler.
Gleiches gilt für:
%Vor%Gedanken?
Auf diese Weise sagen Sie sed, dass Sie keine Kopie speichern (Erweiterung der Backup-Länge mit Null-Länge auf -i
) und die sed-Befehle separat angeben.
entspricht:
%Vor%und beide meinen Ausdruck auf Dateien anwenden, die Dateien überschreiben, aber die alten Dateien mit einem "e" als Backup-Suffix speichern.
Ich denke du willst: sed -i -e Ausdruck [Dateien ...]
Wenn Sie jetzt einen Fehler bekommen, muss etwas mit Ihrem expression
nicht stimmen.
Ihre Zahlen werden durch (float)
durch das :
-Zeichen getrennt. Daher können Sie awk / cut verwenden, um Ihre Zahlen zu erhalten. Es ist einfacher als eine Regex
Überprüfen Sie, ob Sie irgendwelche ungeraden Dateinamen im Verzeichnis haben.
Hier ist eine Möglichkeit, Ihren Fehler zu duplizieren:
%Vor% Eine Möglichkeit, dies zu verhindern, besteht darin, die Optionen mit einem Doppelstrich auf sed
zu setzen, wenn Sie einen Platzhalter verwenden:
Sie können das gleiche tun, um die Datei zu entfernen:
%Vor%Lösung:
sed -i '' 's/ :(float)//g' *
sed -i '' 's/[chuck]: cleaning up...//g' *
Erläuterung:
Ich kann bekommen:
%Vor%funktioniert, aber das erstellt Dateien, die die alten Dateien behalten.
Das liegt daran, dass sed
s i
flag so funktionieren soll
-i Erweiterung
Bearbeiten Sie Dateien direkt und speichern Sie Sicherungen mit der angegebenen Erweiterung . Wenn eine -Extension der Länge 0 angegeben wird, wird keine Sicherung gespeichert.
In diesem Fall wird e
als Erweiterung interpretiert, mit der Sie Ihre Backups speichern möchten. Daher werden alle Ihre Originaldateien mit einem e
an ihren Namen angehängt.
Um eine Erweiterung der Länge Null bereitzustellen, müssen Sie -i ''
verwenden.
Hinweis : Im Gegensatz zu -i<your extension>
funktioniert -i''
nicht. Sie müssen ein Leerzeichen zwischen -i
und ''
haben, damit es funktioniert.
Das Entfernen des -e-Flags führt zu einem nicht abgeschlossenen Ersatzmusterfehler.
Wenn Sie e
unmittelbar nach -i
entfernen, d. h.
sed -i 's/ :(float)//g' *
s/ :(float)//g
wird nun als Erweiterung Argument für i
Flag interpretiert. Und die erste Datei in der Liste der Dateien, die durch die Shell-Erweiterung von *
erzeugt wurde, wird als sed function
(höchstwahrscheinlich s/regular expression/replacement/flags
-Funktion) interpretiert. Sie können dies überprüfen, indem Sie die Ausgabe von
sedfn=$(echo * | cut -d' ' -f1); [[ ${sedfn:0:1} == "s" ]]; echo $?
Wenn die Ausgabe der obigen Befehlskette 0
ist, wird unsere Annahme bestätigt.
Auch in diesem Fall, wenn der erste Dateiname irgendwie als gültige s/regular expression/replacement/flags
sed-Funktion gilt, werden die anderen Dateinamen als reguläre Dateien interpretiert, damit sed arbeiten kann.
Tags und Links sed