337 votes

Supprimer numéro de ligne spécifique dans un fichier texte à l’aide de sed ?

Je veux supprimer un ou plusieurs numéros de ligne spécifique d’un fichier. Comment puis-je faire cela en utilisant sed ?

513voto

Brian Campbell Points 101107

Si vous souhaitez supprimer les lignes 5 à 10 et 12 :

Cet exemple affiche les résultats à l’écran. Si vous souhaitez enregistrer les résultats dans le même fichier :

Cela soutiendra le fichier jusqu'à `` et supprimez les lignes de donnée.

115voto

amit Points 11

Vous pouvez supprimer une ligne particulière avec son numéro de ligne de sed -i « 33e » fichier

Cela supprimera la ligne le numéro de la ligne 33 et enregistrez le fichier mis à jour.

27voto

ghostdog74 Points 86060

et awk ainsi

23voto

Matthew Slattery Points 21628
$ cat foo
1
2
3
4
5
$ sed -e '2d;4d' foo
1
3
5
$ 

3voto

Hastur Points 560

Je voudrais proposer une généralisation avec awk.

Lorsque le fichier est faite par des blocs de taille fixe et les lignes à supprimer sont répétées pour chaque bloc, awk peut fonctionner de manière

awk '{nl=((NR-1)%2000)+1; if ( (nl<714) || ((nl>1025)&&(nl<1029)) ) print  $0}'
 OriginFile.dat > MyOutputCuttedFile.dat

Dans cet exemple, la taille du bloc est de 2000 et je veux imprimer les lignes de [1..713] et [1026..1029].

  • NR est la variable utilisée par awk pour stocker le numéro de ligne courant.
  • % donne le reste (ou module) de la division de deux nombres entiers;
  • nl=((NR-1)%BLOCKSIZE)+1 Ici nous écrire dans la variable nl le numéro de la ligne à l'intérieur du bloc courant. (voir ci-dessous)
  • || et && sont l'opérateur logique OU et ET.
  • print $0 écrit la totalité de la gamme

Why ((NR-1)%BLOCKSIZE)+1:
(NR-1) We need a shift of one because 1%3=1, 2%3=2, but 3%3=0.
  +1   We add again 1 because we want to restore the desired order.

+-----+------+----------+------------+
| NR  | NR%3 | (NR-1)%3 | (NR-1)%3+1 |
+-----+------+----------+------------+
|  1  |  1   |    0     |     1      |
|  2  |  2   |    1     |     2      |
|  3  |  0   |    2     |     3      |
|  4  |  1   |    0     |     1      |
+-----+------+----------+------------+

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X