|
|
|
|
Bonjour,
Je souhaiterais traité la ligne précédant la ligne contenant un caractère reconnaissable avec sed (ou autre si il y a ;-) mais je ne sait pas comment la récupérer. La fonction i\ permet d'inséré, mais cela me créer une nouvelle ligne, mais pas de modifier la précédente...
Plus concretement, j'ai des nombres sur une première ligne qui continu sur une second avec un signe * de continuation de données sur cette seconde ligne. j'aurais besoin de supprimer cet *, et d'avoir -- en fin de première ligne et ce de manière récusive dans un fichier
Exemple :
texte initial
1 25 3 45 2 68 4 95
* 5 85 6 24 1 45
texte voulu
1 25 3 45 2 68 4 95 --
5 85 6 24 1 45
D'avance merci pour toutes les aides et bon WE aussi...
Salut,
[tmpfs]$ cat nono
1 25 3 45 2 68 4 95
* 5 85 6 24 1 45
1 25 3 45 2 68 4 94
1 25 3 45 2 68 4 93
* 5 85 6 24 1 45
1 25 3 45 2 68 4 92
1 25 3 45 2 68 4 91
1 25 3 45 2 68 4 90
* 5 85 6 24 1 45
[tmpfs]$ sed 'N;/\n\* /{s//--\n/;b};P;D' nono
1 25 3 45 2 68 4 95--
5 85 6 24 1 45
1 25 3 45 2 68 4 94
1 25 3 45 2 68 4 93--
5 85 6 24 1 45
1 25 3 45 2 68 4 92
1 25 3 45 2 68 4 91
1 25 3 45 2 68 4 90--
5 85 6 24 1 45
[tmpfs]$;-))
$ man woman Il n'y a pas de page de manuel pour woman.
|
sed '
N # On ajoute la ligne suivante dans l'espace de travail
/\n\* / { # Si on trouve une fin de ligne suivie d'un astérisque
s//--\n/ # on substitue cette fin de ligne suivie d'un astérisque par
# 2 tirets suivis d'une fin de ligne
b # et on se branche à la fin du script (après l'accolade fermante)
}
P # Si aucune correspondance à la regex n'a été trouvée, on affiche
# la 1ère partie de l'espace de travail (jusqu'à la fin de ligne (\n)
D # on l'efface et on reprend le cycle en haut en ajoutant une nouvelle ligne
' $ man woman Il n'y a pas de page de manuel pour woman. |