Je cale sec avec /sed/
m4ni4k
-
jipicy Messages postés 41342 Statut Modérateur -
jipicy Messages postés 41342 Statut Modérateur -
Bonjour,
J'essaye depuis un bon moment de comprendre comment récupérer un ligne pour la réinsérer à un emplacement de mon choix. voici le modèle:
Commetn faire, jusquà présent je me suis limité à ça:
C'est vraiment frustrant d'être à 2 doigts d'y arriver mais de ne quand même rien capter!
Je remercie d'avance le bon samaritain qui pourra m'extirper cette épine du pied!
Au sens propre comme au figuré parcque j'ai vraiment la sensation de coder comme un pied.
;p
J'essaye depuis un bon moment de comprendre comment récupérer un ligne pour la réinsérer à un emplacement de mon choix. voici le modèle:
printf "%s\n" a b c d e f g h i j |sed $=|sed -e /^[0-9]/'{h;d}' ....
Commetn faire, jusquà présent je me suis limité à ça:
printf "%s\n" a b c d e f g h i j |sed $=|sed -e /^[0-9]/'{h;d}' -e 1'{H;g;}'
C'est vraiment frustrant d'être à 2 doigts d'y arriver mais de ne quand même rien capter!
Je remercie d'avance le bon samaritain qui pourra m'extirper cette épine du pied!
Au sens propre comme au figuré parcque j'ai vraiment la sensation de coder comme un pied.
;p
A voir également:
- Je cale sec avec /sed/
- Mode sec climatiseur - Guide
- Mode sec - Guide
- Cale papier - Guide
- Remplacez le mot sed par le mot mais dans tout le texte. combien de caractères contient le document suite à cette modification (en incluant les espaces) ? - Guide
- Comptage des caractères dans Word ✓ - Forum Word
Genre, si 10 était la valeur mise en mémoire tampon (que j'aurais récupérer au préalable sur l'avant dernière ligne), j'aimerais qu'il la recale après le c, mais avant le d
a
b
c =10
d
#!/bin/bash A=/archive.ubuntu.com M=/medibuntu C="wget -cNrnH -P$A" H="/log_POOL\\\\\n http:/" read X sudo apt-get update P="apt-get -qq --print-uris install $X" Q=`$P|sed -n $=` R=`sed '/^D/!d;s/^Da.*,/# /' /var/lib/apt/lists/*ease|sed :a\;$\!N';s/\n/\\\n/;s/UTC\\\nDescription: /\\t/;ta'` S=${X// /-} $P|sed -e "s/'//;s/'.*//"\ -e "/\\$A\/u/ s#file:#$C -a$A/ubuntu$H#"\ -e "/\\$A\/m/ s#file:$A$M#$C$M -a$A$M$H/packages.medibuntu.org#"\ -e "1i#\!/bin/sh\n\n# Packages amount:\t\t$Q\n\n$R\n"\ >/tmp/apt-wget_$S.sh && chmod +x /tmp/apt-wget_$S.shTu vois un peu de quoi il s'agit, j'aimerais donc me passer de la variable Q qui doit inutilement refaire un apt-get juste pour compter des lignes!!!!
Je pourrais aussi me passer de la variable P, ce qui ne serais pas plus mal!
voila comme ça tu sais tout!
printf "%s\n" a b c d e f g h i j | sed '$='| sed ' :z N /c$/!{ bz } x :a N /[0-9]$/!{ ba } s/\(.*\)\n\(.*\)/ = \2\1/ H g s/\n =/ =/ ' a b c = 10 d e f g h i j;-))Ensuite, on peut se dire que j'étais quand même vraiment loin du compte, mais c'est aussi parcque j'espérais utopiquement trouver une méthode plus générique.
C-à-d que je rêverais d'avoir à disposition une fonction cut/insert qui comme je le souhaiterais, effacerais, tout en gardant en mémoire, plus sobrement le contenu de l'avant dernière ligne (puisque le comptage de ligne s'opère de cette façon dans sed, et que je trouvais assez pertinent de tout grouper dans une seule commande); -- une autre petite parenthèse d'ailleurs juste pour dire que j'aurais bien aimé aussi pouvoir identifier l'avant dernière ligne par un truc simple du style ${ -1} -- ; pour ensuite gérer ce contenu (mémoire tampon) de telle manière qu'il puisse être réinjecter où bon nous semble, y compris par le biais de la commande d'insertion.
Un détail, pourquoi tiens-tu absolument à mettre $= entre des 'quotes'?
Personnellement j'ai tendance à éliminer tout ce que j'estime être superflu.
C'est peut-être une erreur, mais je crois que tu dois avoir compris à quel point je militais en faveur des codes minimalistes. c'est presque maladif, peut-être qu'il faudrait plutôt mieux que je me soigne. ;))
En attendant, ça ne m'empêchera pas d'analyser tes propositions sous toutes leurs coutures et de tenter de les adapter dans toutes sortes de situations pour mieux tenter de les maitriser, merci encore!