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'?

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.


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 .


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.)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.