Comment obtenir la première ligne d'un fichier texte d'entrée, tout en supprimant cette ligne du fichier texte


11

Comment puis-je obtenir la première ligne d'un fichier texte d'entrée, tout en supprimant cette ligne du fichier texte?

Si j'avais un fichier texte /myPathToTheFile.txtcomme celui-ci

► put returns between paragraphs
► for linebreak add 2 spaces at end
► _italic_ or **bold**

J'aimerais avoir cette ligne en sortie

► put returns between paragraphs

et mon fichier texte devrait être maintenant comme ça

► for linebreak add 2 spaces at end
► _italic_ or **bold*

Notez que le coût de cette opération est proportionnel à la taille du fichier. Donc, si le fichier est volumineux et que vous le faites souvent, ce sera très lent.
CodesInChaos

Réponses:


13
ex -s /myPathToTheFile.txt <<\EX
1p
1d
wq
EX

ou

ex -s /myPathToTheFile.txt <<< 1p$'\n'1d$'\n'wq

ou, moins de frappe:

ed -s /myPathToTheFile.txt <<< $'1\nd\nwq'

Wow, belle utilisation de ed ...!
qwr

10

Au moins avec GNU sed:

$ cat file
► put returns between paragraphs
► for linebreak add 2 spaces at end
► _italic_ or **bold**

$ sed -i '1{
w /dev/stdout
d}' file
► put returns between paragraphs

$ cat file
► for linebreak add 2 spaces at end
► _italic_ or **bold**

Avec GNU sed, il peut être écrit comme une ligne

sed -i -e '1 {w /dev/stdout' -e 'd}' file

6

En supposant que vous demandez un script shell, cela fera ce que vous avez demandé:

NAME=$1
head -n 1 $NAME
sed -i '1d' $NAME


2

Vous pouvez utiliser head, tailet mv:

Affichez la première ligne:

head -1 myPathToTheFile.txt

Garder les dernières +2lignes ( ):

tail -n +2 myPathToTheFile.txt > file.tmp && mv file.tmp myPathToTheFile.txt

1

En utilisant des descripteurs de fichiers et un peu de python

{
    { 
    head -n1 >&3; 
    3>&- tail -n +1;
    3>&- python -c 'import sys; sys.stdout.truncate(sys.stdout.tell())';
    }<file 1<>file
} 3>&1

1

Utilisation de la tête et de la queue. Le fichier est target.txt

head -1 target.txt && tail -n+2 target.txt > tmp
mv tmp target.txt && rm tmp

Remarque: Assurez-vous qu'il n'y a pas de fichier tmp existant dans le dossier actuel, sinon il sera supprimé.

Explication:

  • "head -1" sélectionne la première ligne
  • "tail -n + 2 target.txt> tmp" sélectionne toutes les lignes à partir du 2ème (y compris) et les place dans tmp
  • mv écrase le fichier d'origine avec tmp
  • rm tmp supprimera le fichier tmp ainsi créé
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.