Comment puis-je supprimer la première ligne d'un fichier et conserver les modifications?
J'ai essayé cela, mais cela efface tout le contenu du fichier.
$sed 1d file.txt > file.txt
shell-script
sed
ksh
kickass13
la source
la source
sed
, vous pouvez utilisersed -i .bak '1d' file.txt
.ed
.ed
commande serait la suivante:printf "%s\n" 1d w q | ed file.txt
(I Heart Ed)-exec sed -i '1d' {} \;
Une autre option très légère consiste simplement à "aligner" tout sauf la première ligne (cela peut être un moyen facile de supprimer les en-têtes de fichiers en général):
Après @Evan Teitelman, vous pouvez:
Pour éviter un fichier temporaire. Une autre option pourrait être:
Et ainsi de suite. Test du dernier:
Oups nous avons perdu une nouvelle ligne (par le commentaire @ 1_CR ci-dessous), essayez plutôt:
En revenant à sed, essayez:
ou peut-être
Pour éviter les effets secondaires.
la source
tail
astuce a fonctionné pour moi (a pris moins de 3 secondes sur un fichier de 130 Mo). Merci!echo "$(tail -n +2 file.txt)" > file.txt
est la réponse parfaite.Jetez aussi un coup d' œil à
sponge
partirmoreutils
.sponge
absorbe les données de l'entrée standard jusqu'à ce que la fin de l'écriture de l'entrée standard se ferme avant l'écriture dans un fichier. Il est utilisé comme suit:la source
Ce sujet est intéressant, je teste donc le benchmark de 3 manières:
sed '1d' d.txt > tmp.txt
tail -n +2 d.txt > tmp.txt
sed -i '1d' d.txt
Notez que la cible
d.txt
est un fichier de 5,4 Go.Obtenez le résultat:
Conclusion: Il semble que ci-dessous soit le moyen le plus rapide:
sed '1d' file.txt > tmpfile; mv tmpfile file.txt
la source
sed '1d' d.txt
méthode n'inclut pas (ou semble-t-il en lisant vos tests) lamv
commande. Lors de mes tests sur FreeBSD avec un fichier de 20 Mo,sed -i
c'était le plus rapide.ex
peut être utilisé pour une véritable édition sur placequi ne nécessite pas de fichier temporairela source
strace -e open ex -c ':1d' -c ':wq' foo
. ex tronque le fichier d'origine avec le fichier temporaire, où l'option -i de GNU sed écrase l'original avec le fichier temporaire. Je ne suis pas sûr de savoir comment fonctionne sed de BSD.Le moyen le plus simple et le plus simple de supprimer la première ligne d'un fichier
sed
consiste à:la source
Vous pouvez utiliser Vim en mode Ex:
1
trouver la première ligned
effacerx
sauver et fermerla source
Cette commande supprimera 1 ligne et enregistrera sous "fichier.txt".
la source
Supprimer une ligne praticiler dans un fichier
Sed '1d' file
Sed '1d3d' fichier
Supprimer le caractère en ligne
1 Supprimer les deux premières chartes en ligne
Sed 's /^..//' file
2 Supprimer les deux dernières lignes de ligne
Sed 's / .. £ //' file
3 Supprimer la ligne vide
Fichier Sed '/ ^ £ / d'
la source
£
≠$
.Vim pourrait utiliser ceci:
la source
cat file01 | sed -e '1,3d'
// affiche le contenu de file01 mais supprime les première et troisième lignes
la source