Was macht sed -i '1d'?

28

Ich verstehe, dass dies sedein Befehl zum Bearbeiten von Textdateien ist.

Meiner Ansicht nach -ibedeutet dies, dass die Operation an der Datei selbst ausgeführt wird. Ist dies korrekt?

Was ist '1d'?

Jérôme Verstrynge
quelle

Antworten:

43

In sed:

  • -i Mit dieser Option wird die Eingabedatei direkt bearbeitet

  • '1d' Entfernt die erste Zeile der Eingabedatei

Beispiel:

% cat file.txt 
foo
bar

% sed -i '1d' file.txt 

% cat file.txt        
bar

Beachten Sie, dass es in den meisten -iFällen eine gute Idee ist, eine Sicherungskopie zu erstellen, während Sie die Option verwenden, damit Sie die Originaldatei im Falle einer unerwarteten Änderung sichern können .

Zum Beispiel, wenn Sie:

sed -i.orig '1d' file.txt 

Die ursprüngliche Datei wird beibehalten file.txt.origund die geänderte Datei wird beibehalten file.txt.

heemayl
quelle
4
Sie können auch einen "Probelauf" durchführen, ohne -izu sehen, was zuerst passiert, und dann -idie Datei tatsächlich ändern.
Baard Kopperud
15

1. a)

sed '1d' file.txt

Druckt den Inhalt von file.txt; ohne die erste Zeile; auf die Standardausgabe.


2. a)

sed -i    '1d' file.txt # GNU, NetBSD, OpenBSD
sed -i '' '1d' file.txt # FreeBSD, macOS

Druckt den Inhalt von file.txt; ohne die erste Zeile; zurück in file.txt; Überschreiben des Originals.


2. b)

sed -i.back '1d' file.txt

Erstellt eine Sicherungskopie des Originals (als file.txt.back), bevor Änderungen vorgenommen werden. Mit Ausnahme von FreeBSD sedmuss das Suffix (hier .back) an die -iOption angehängt werden (im selben Argument kein Leerzeichen zwischen -iund .back).


3. a)

sed '2d' file.txt

Druckt den Inhalt von file.txt; ohne die zweite Zeile; auf die Standardausgabe.
(Wenn Sie eine Zahl angeben, wird die entsprechende Zeile entfernt.)

Auch mit der -iFlagge kompatibel .


3. b)

sed '1!d' file.txt

Druckt den Inhalt von file.txt; alle außer der ersten Zeile ausschließen; auf die Standardausgabe.
(Mit anderen Worten, nur die erste Zeile wird gedruckt).

Auch mit der -iFlagge kompatibel .


3. c)

sed '$d' file.txt

Druckt den Inhalt von file.txt; ohne die letzte Zeile; auf die Standardausgabe.

Auch mit der -iFlagge kompatibel .

Stimmen
quelle
Zu Ihrer Information: Die BSD-Version (dh der De-facto-Standard von macOS) kann normalerweise nur zusammenarbeiten, wenn Sie ein Backup erstellen (2. b) oder die Backup-Bypass-Methode verwenden (2. c). Die GNU-Version fordert Sie nicht dazu auf. Bestehende Dateien werden ohne zu zögern destruktiv bearbeitet und überschrieben.
Stimmen
4

In sed -hhaben:

  -i[SUFFIX], --in-place[=SUFFIX]
             edit files in place (makes backup if SUFFIX supplied)

und 'den Vorgang für die Datei selbst ausführen.' absolut ist es.

Und mansagte: 'Sed ist ein Stream-Editor. Ein Stream-Editor wird verwendet, um grundlegende Texttransformationen für einen Eingabestream (eine Datei oder eine Eingabe aus einer Pipeline) durchzuführen. '

als ihre frage,

sed -i '1d' file_name

bedeutet: lösche die erste Zeile in der Datei "file_name"an Ort und Stelle und sichere sie in der Datei. (Genau wie die Datei bearbeiten und die erste Zeile direkt löschen.)

Sieben
quelle