Ich habe eine Datei namens $dir
und eine Zeichenkette mit dem Namen $line
. Ich weiß, dass diese Zeichenkette eine vollständige Zeile dieser Datei ist, aber ich kenne ihre Zeilennummer nicht und möchte sie aus der Datei entfernen soll ich tun?
Ist es möglich, awk zu verwenden?
Lesen Sie die Zeilen nacheinander und schreiben Sie alle außer der übereinstimmenden Zeile in eine andere Datei. Ersetzen Sie dann die Originaldatei.
Dies wird nur über jede Zeile schauen und wenn es nicht das ist, was Sie löschen wollen, wird es in ein Array geschoben, das in die Datei zurückgeschrieben wird. Sehen Sie das
%Vor%Das ist auch gut, wenn Sie nach einer Teilzeichenfolge (ID) in einer Zeile suchen und die alte Zeile durch eine neue Zeile ersetzen möchten.
Code:
%Vor%Beispiel:
Eingabe: "123, Schüler"
Alte Datei:
ID, Beruf
123, Schüler
124, Brick-Layer
Wenn Sie den Code ausführen, ändert sich die Datei in:
Neue Datei:
ID, Beruf
124, Brick-Layer
Ich denke, der beste Weg, mit Dateien zu arbeiten, besteht darin, sie als Zeichenfolgen zu bearbeiten.
Zuerst alle Zeilen der Datei (die folgenden Codes können komprimiert werden):
%Vor%Hier können Sie Ihre Suche durchführen:
%Vor%Sie können einfach die Zeile $ key + 1 entfernen:
%Vor%Zuletzt müssen Sie Ihre Änderungen in der Datei speichern:
%Vor%Sie können den obigen Code auch als Funktion festlegen.
Hinweise:
$ Zeile darf keine neuen Zeilenzeichen wie \ n haben. Sie müssen sie entfernen:
%Vor%Verwenden Sie nicht
%Vor%statt
%Vor%weil der erste Fall die Zeile nicht entfernt, löscht sie nur die Zeile (und eine unerwünschte leere Zeile bleibt bestehen). In diesem Fall fügt implode () eine neue Zeile für $ fileLineByLine [$ key] hinzu, die leer ist. Andernfalls, wenn Sie eine Variable deaktivieren, ist sie nicht verfügbar (und implode () kann sie nicht finden).