Que fait sed -i '1d'?

28

Je comprends que sedc'est une commande pour manipuler un fichier texte.

D'après ma recherche sur Google, il semble que cela -isignifie effectuer l'opération sur le fichier lui-même, est-ce correct?

Et alors '1d'?

Jérôme Verstrynge
la source

Réponses:

43

Dans sed:

  • -i L'option modifiera le fichier d'entrée sur place

  • '1d' supprimera la première ligne du fichier d'entrée

Exemple:

% cat file.txt 
foo
bar

% sed -i '1d' file.txt 

% cat file.txt        
bar

Notez que, la plupart du temps, c'est une bonne idée de faire une sauvegarde tout en utilisant l' -ioption afin que vous ayez le fichier d'origine sauvegardé en cas de changement inattendu.

Par exemple, si vous le faites:

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

le fichier d'origine sera conservé tel quel file.txt.origet le fichier modifié le sera file.txt.

heemayl
la source
4
Vous pouvez également effectuer un "essai à sec" sans le -ipour voir ce qui se passe en premier, puis utiliser -ipour modifier réellement le fichier.
Baard Kopperud
15

1. a)

sed '1d' file.txt

Imprime le contenu de file.txt; à l'exclusion de la première ligne; à la sortie standard.


2. a)

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

Imprime le contenu de file.txt; à l'exclusion de la première ligne; retour dans file.txt; écraser l'original.


2. b)

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

Crée une sauvegarde de l'original (as file.txt.back), avant d'apporter des modifications. Sauf avec FreeBSD sed, le suffixe (ici .back) doit être attaché à l' -ioption (dans le même argument, pas d'espace entre -iet .back).


3. a)

sed '2d' file.txt

Imprime le contenu de file.txt; à l'exclusion de la deuxième ligne; à la sortie standard.
(La spécification d'un nombre supprimera la ligne correspondante).

Également compatible avec le -idrapeau.


3. b)

sed '1!d' file.txt

Imprime le contenu de file.txt; excluant tout sauf la première ligne; à la sortie standard.
(En d'autres termes, seule la première ligne est imprimée).

Également compatible avec le -idrapeau.


3. c)

sed '$d' file.txt

Imprime le contenu de file.txt; à l'exclusion de la dernière ligne; à la sortie standard.

Également compatible avec le -idrapeau.

voix
la source
FYI: La version BSD (c'est-à-dire la norme de fait macOS) ne coopérera généralement que si vous créez une sauvegarde (2. b) ou utilisez la méthode de contournement de la sauvegarde (2. c). La version GNU ne vous le demandera pas. Il éditera et écrasera de manière destructrice les fichiers existants sans hésitation.
voix
4

En sed -havoir:

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

et "effectuer l'opération sur le fichier lui-même." c'est absolu.

Et a mandéclaré: «Sed est un éditeur de flux. Un éditeur de flux est utilisé pour effectuer des transformations de texte de base sur un flux d'entrée (un fichier ou une entrée à partir d'un pipeline). '

comme votre question,

sed -i '1d' file_name

signifie: supprimer la première ligne du fichier "file_name"à l'endroit et sauvegarder dans le fichier. (tout comme modifier le fichier et supprimer directement la première ligne.)

Sept
la source