Afficher une ligne sur deux

Résolu/Fermé
Sabetodo Messages postés 120 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 18 août 2010 - 10 janv. 2009 à 19:38
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 3 sept. 2015 à 13:49
Bonjour,
salut les gars, je dois ecrire une ligne de commande qui prend la sortie d'un "ls -l" et qui n'affiche qu'une ligne sur deux a partir de la premiere. je l'ai fait, mais ce n'est pas evident et j'ai besoin d'un coup de main.
voici ce que j'ai fait:
(ca_n@qnx 2111)ls -l | sed '$N;s/\n//'

le resultat devrait etre par exemple:
0*************
2*************
4*************
6*************

1 réponse

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
10 janv. 2009 à 19:43
Salut,
sed -n 1~2p
0
Sabetodo Messages postés 120 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 18 août 2010 3
10 janv. 2009 à 20:21
salut jipicy c'est gentil de ta part de m'avoir repondu a temps. En fait, j'avais essaie cette option, il m'a affiche ce message la: "sed: 1: "1~2p": invalid command code ~".
je ne sais plus faire.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897 > Sabetodo Messages postés 120 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 18 août 2010
11 janv. 2009 à 00:24
Alors essaie comme ça :
sed '1n;N;s/.*\n//'
;-))
0
Sabetodo Messages postés 120 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 18 août 2010 3 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
12 janv. 2009 à 11:00
merci beaucoup jipicy, je viens de tester ce que tu m'a propose et ca marche tout a fait. Bonne journee.
0
nestoyeur > Sabetodo Messages postés 120 Date d'inscription samedi 1 mars 2008 Statut Membre Dernière intervention 18 août 2010
3 sept. 2015 à 12:21
Bonjour, quelqu'un pourrais m'aider a decortiquer cette expression reguliere afin de la comprendre ?
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417 > nestoyeur
3 sept. 2015 à 13:49
Salut,

1n
Quand on rencontre la 1ère ligne, on passe à la suivante (tout en affichant la 1ère ligne sur la sortie standard (l'écran))

N
Pour le reste, à chaque ligne rencontrée on ajoute la suivante dans l'espace de travail, ce qui nous donne en gros une ligne qui ressemble à :
une ligne blabla\nune autre ligne blabla

remarque le caractère "\n" (fin de ligne) entre les 2 lignes.

s/.*\n//
On supprime tout (.*) ce qui précède le caractère fin de ligne (\n) et on affiche le reste sur la sortie standard.

Une meilleure façon de faire serait
sed -n 'N;P;d' fichier
qui fait exactement la même chose mais en plus simple.
-n
On imprime à l'écran que ce qu'on demande, notamment grâce aux flags p ou P
N
Pour chaque ligne rencontrée on ajoute la ligne suivante
P
On imprime sur la sortie standard tout ce qui précède le caractère fin de ligne
d
On supprime tout ce qui se trouve dans l'espace de travail et on recommence.
1