2 votes

Comment supprimer la première ligne d'un fichier avec sed ?

Les lignes suivantes ajoutent le contenu de essay_i.txt à la fin de essay1.txt ;

touch essay1.txt
for (( i = 1 ; i <= 10 ; i++ )); do
sed '2p' essay_"${i}".txt >> essay1.txt
done

comment dois-je faire pour que la première ligne de chaque essai_i.txt ne soit pas copiée (c.-à-d. copier seulement la ligne 2->fin) ?

0 votes

C'est l'ajout que vous voulez, ou la version sed ? Pour une version directe de Shell, vous pourriez utiliser ` tail -n +2 essai_i.txt >> essai1.txt `

1 votes

Votre script copie deux fois la ligne des secondes, est-ce intentionnel ? (en fait, ça ne fonctionne pas du tout pour moi, donc je devine).

0 votes

Stefano Palazzo : désolé, c'est ma faute (erreur de frappe). Merci.

8voto

andybee Points 497

Pour supprimer la première ligne, utilisez '1d' (c'est-à-dire ligne 1, supprimer) :

touch essay1.txt
for file in essay_*; do
  sed '1d' $file >> essay1.txt
done

la sortie sera

~$ cat essay1.txt 
line 2 from essay 1
line 3 from essay 1
line 2 from essay 2
line 3 from essay 2
...

pour tous les fichiers nommés essay_* dans le répertoire de travail actuel.


Au lieu d'utiliser sed vous pouvez également utiliser tail pour faire ce travail :

tail -n +2 $file >> essay1.txt

+2 signifie à partir de la deuxième ligne ( -n 2 serait les deux dernières lignes).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X