Perso, je suis super rigoureux sur l'indentation. Si c'était mon code, je sais que je pourrais m'appuyer sur le motif ^class\> pour ajouter namespace titi\n{ et sur le motif ^}$ pour ajouter un \n} dans les .h
Pour les cpp, s'il y a d'autres directives using, rien de plus simple que d'en rajouter une. Sinon, il faut arriver à identifier un motif qui te permettrait de rajouter ton using à un endroit pertinent. La, ça dépend de ton code.
Si l'identation de ton code n'est pas 100 % fiable, tu peux p-e te mettre dans une situation maitrisée (au moins pour les éléments qui t'intéressent) en farfouillant dans les options d'indent.
oui. Si on te propose une machine avec forcément un linux dessus, c'est aussi de la vente liée, si l'install et/ou le cd de la distrib sont facturées. Personne dit le contraire je pense.
L'objectif, c'est pas non plus qu'il n'y ait plus de machines préinstallés avec des OS, juste d'avoir le choix de l'OS, voire de *pas avoir* d'OS.
je suis plus d'accord avec Archibald là.
le fait que j'ai mis un cat dans mon commentaire précédent, c'est vraiment un artefact de ma méthode de dév de regex. La finalisation du script consiste à virer toutes les scories du genre un cat qui traîne.
Pour un "vrai" script, le cat aurait vite sauté :-)
pour l'exemple que tu donnes, si tu veux conserver une copie de ton fichier de départ, je ferais plus un :
tar czf fichier.tar.gz fichier
sed -i xxxxx fichier
parce que pendant que tu élabores la regex, c'est plus facile de modifier la fin de ta ligne (la regex) si y a pas le nom de fichier en fin de ligne.
Après, pas pensé nettoyé ... je suis contre l'utilisation de cat dans une série d'opérations pipée aussi :)
clair que ça dépend du contexte ...
Ca te conviendra pas forcément, mais avec les commandes usuelles du shell : cat | grep -Ev '^.{4}[[:space:]]{10}' | cut -c 4-14
pas si mal que ça. Au vu des messages que tu as posté ces derniers temps, y a une nette progression déjà :)
Le problème fondamental, c'est que sed travaille ligne par ligne, et là, tu veux faire quelquechose pour lequel il faut travailler sur plusieurs lignes. Forcément, ça va être compliqué ...
en repartant de ton exemple dans un commentaire ci dessus, une proposition en awk : awk 'BEGIN{prev="unset"} /^const\>|^int\>|^temp\>/ {if (prev != $1) print ""; print $0; next} {print}'
attention, cette version ne fonctionne que si tes identifiants (int, const ou autre) sont en début de ligne puisque $1 représente le premier élément de la ligne.
C'est pas le hello world du awk, donc l'opportunité d'apprendre quelques trucs de plus ;)
man awk pour plus de détails, et pose d'autres questions si tu t'en sors pas !
y a tellement de façon d'approcher le problème. Au choix :
- avec awk (pas trop compliqué, mais moyen performant),
- en utilisant l'option -c de grep et une habile combinaison de head et de tail dans tous les sens (p-e pas super efficace, mais ça doit être rigolo à écrire =)
- en encapsulant tes regex dans un langage de script de plus haut nieveau (python, perl, ruby, ...)
l'option -e de sed, c'est pour faire la v2 de ton script ;-)
En fait, plutôt que lancer plusieurs sed avec une regex chacun, tu peux lancer un seul sed avec plusieurs regex. L'option -e permet de faire ça, genre : sed -e regex1 -e regex2 ... -e regexn
Possible que sur certaines plate forme, l'option -e soit obligatoire, même quand il y a une seule regex. Je ne sais plus trop, mais j'ai pris l'habitude de le mettre tout le temps maintenant ...
quelques remarques pour améliorer ton script : for file in [^$prefix]*
do
echo $file
done
fonctionne chez moi ... Bizzare que ça ne passe pas chez toi.
- Tu peux éventuellement utiliser des trucs spécifiques à bash (moins portable donc ) : shopt -s extglob
for file in !($prefix); do
echo $file
done
man bash pour plus de détails
- pour éviter tous les fichiers temporaires, tu peux utiliser l'option -i de sed
- une regex plus simple pour matcher le motif virgule ou virgule + espace est : , \? (soit virgule + espace + point d'interrogation echappé). Ensuite, dans ton motif de substitution, tu n'as plus besoin d'échapper les caractère 's/, \?/, /g' doit suffire. Les motifs \< et \> ne sont pas utiles ici, puisque l'espace et la virgule sont déjà des délimiteurs de mot.
- pour rajouter END à la fin, le mieux, c'est encore : echo $end >> $file
(simple is beautiful ;)
sed -e 's/\/\//#/g' fichier ça doit le faire.
Sinon, on l'oublie souvent (voire on le sait pas), mais on peut utiliser n'importe quel caractère comme séparateur pour sed, genre '~'
du coup, sed -e 's~//~#~g' fichier, ça le fait aussi
ah voui, c'est des 'l' et des 'v' minuscules ... comme ils sont affichés en majuscule à l'écran, je me fait tout le temps avoir quand je l'explique par écrit (mais jamais que je le tape, ouf ;-)
Si je ne dis pas de bétise, l'éditeur de lien fait une seule passe et jette toutes les libs dont il n'a rencontré aucun symbole.
dans ton édition de lien, essaie de mettre tes .o en premier, et les libs ensuite et tiens nous au courant !
sinon, je voulais, comme toi, un portable sans OS. Pas trouvé rue montgallet. Par contre, Surcouf assemble des portables sans OS. C'est pas forcément le meilleur rapport qualité/prix, je peux pas dire, puisque mon critère principal, c'est que je voulais pas de Windows ... :D
en tout cas, avec le prix d'une licence wIndows en moins, ça m'a paru correct :)
# sed peut-être ?
Posté par gaaaaaAab . En réponse au message Script pour modifier C++ sources. Évalué à 2.
Pour les cpp, s'il y a d'autres directives using, rien de plus simple que d'en rajouter une. Sinon, il faut arriver à identifier un motif qui te permettrait de rajouter ton using à un endroit pertinent. La, ça dépend de ton code.
Si l'identation de ton code n'est pas 100 % fiable, tu peux p-e te mettre dans une situation maitrisée (au moins pour les éléments qui t'intéressent) en farfouillant dans les options d'indent.
[^] # Re: Dans ce cas...
Posté par gaaaaaAab . En réponse à la dépêche Acer condamné à rembourser Windows. Évalué à 3.
L'objectif, c'est pas non plus qu'il n'y ait plus de machines préinstallés avec des OS, juste d'avoir le choix de l'OS, voire de *pas avoir* d'OS.
[^] # Re: Oui mais ...
Posté par gaaaaaAab . En réponse à la dépêche Acer condamné à rembourser Windows. Évalué à 5.
[^] # Re: parser ?
Posté par gaaaaaAab . En réponse au message [expression régulière] détecter un caractère non espace dans une séquence.. Évalué à 2.
le fait que j'ai mis un cat dans mon commentaire précédent, c'est vraiment un artefact de ma méthode de dév de regex. La finalisation du script consiste à virer toutes les scories du genre un cat qui traîne.
Pour un "vrai" script, le cat aurait vite sauté :-)
pour l'exemple que tu donnes, si tu veux conserver une copie de ton fichier de départ, je ferais plus un :
tar czf fichier.tar.gz fichier
sed -i xxxxx fichier
[^] # Re: parser ?
Posté par gaaaaaAab . En réponse au message [expression régulière] détecter un caractère non espace dans une séquence.. Évalué à 2.
Après, pas pensé nettoyé ... je suis contre l'utilisation de cat dans une série d'opérations pipée aussi :)
[^] # Re: parser ?
Posté par gaaaaaAab . En réponse au message [expression régulière] détecter un caractère non espace dans une séquence.. Évalué à 2.
et préciser le moteur de regex que tu utilises puisqu'apparement, tu en utilises un.
Sinon, hors syntaxe particulière, la regex que tu vas chercher, c'est l'inversion de la regex qui matche 10 espaces consécutifs en fait.
[^] # Re: parser ?
Posté par gaaaaaAab . En réponse au message [expression régulière] détecter un caractère non espace dans une séquence.. Évalué à 1.
je pensais cat <fichier> | (...), 'videmment ...
[^] # Re: parser ?
Posté par gaaaaaAab . En réponse au message [expression régulière] détecter un caractère non espace dans une séquence.. Évalué à 1.
Ca te conviendra pas forcément, mais avec les commandes usuelles du shell :
cat | grep -Ev '^.{4}[[:space:]]{10}' | cut -c 4-14
[^] # Re: rechercher/remplacer
Posté par gaaaaaAab . En réponse au message document recapilutatif SED. Évalué à 4.
[^] # Re: fais bosser ton imagination
Posté par gaaaaaAab . En réponse au message document recapilutatif SED. Évalué à 2.
awk 'BEGIN{prev="unset"} /^const\>|^int\>|^temp\>/ {if (prev != $1) print ""; print $0; prev = $1; next} {print}'
[^] # Re: fais bosser ton imagination
Posté par gaaaaaAab . En réponse au message document recapilutatif SED. Évalué à 2.
Le problème fondamental, c'est que sed travaille ligne par ligne, et là, tu veux faire quelquechose pour lequel il faut travailler sur plusieurs lignes. Forcément, ça va être compliqué ...
en repartant de ton exemple dans un commentaire ci dessus, une proposition en awk :
awk 'BEGIN{prev="unset"} /^const\>|^int\>|^temp\>/ {if (prev != $1) print ""; print $0; next} {print}'
attention, cette version ne fonctionne que si tes identifiants (int, const ou autre) sont en début de ligne puisque $1 représente le premier élément de la ligne.
C'est pas le hello world du awk, donc l'opportunité d'apprendre quelques trucs de plus ;)
man awk pour plus de détails, et pose d'autres questions si tu t'en sors pas !
# fais bosser ton imagination
Posté par gaaaaaAab . En réponse au message document recapilutatif SED. Évalué à 2.
- avec awk (pas trop compliqué, mais moyen performant),
- en utilisant l'option -c de grep et une habile combinaison de head et de tail dans tous les sens (p-e pas super efficace, mais ça doit être rigolo à écrire =)
- en encapsulant tes regex dans un langage de script de plus haut nieveau (python, perl, ruby, ...)
bref, innove ! :-)
[^] # Re: sed -i et autres ...
Posté par gaaaaaAab . En réponse au message aide sur un script. Évalué à 2.
En fait, plutôt que lancer plusieurs sed avec une regex chacun, tu peux lancer un seul sed avec plusieurs regex. L'option -e permet de faire ça, genre :
sed -e regex1 -e regex2 ... -e regexn
Possible que sur certaines plate forme, l'option -e soit obligatoire, même quand il y a une seule regex. Je ne sais plus trop, mais j'ai pris l'habitude de le mettre tout le temps maintenant ...
# sed -i et autres ...
Posté par gaaaaaAab . En réponse au message aide sur un script. Évalué à 1.
for file in [^$prefix]*
do
echo $file
done
fonctionne chez moi ... Bizzare que ça ne passe pas chez toi.
- Tu peux éventuellement utiliser des trucs spécifiques à bash (moins portable donc ) :
shopt -s extglob
for file in !($prefix); do
echo $file
done
man bash pour plus de détails
- pour éviter tous les fichiers temporaires, tu peux utiliser l'option -i de sed
- une regex plus simple pour matcher le motif virgule ou virgule + espace est :
, \? (soit virgule + espace + point d'interrogation echappé). Ensuite, dans ton motif de substitution, tu n'as plus besoin d'échapper les caractère
's/, \?/, /g' doit suffire. Les motifs \< et \> ne sont pas utiles ici, puisque l'espace et la virgule sont déjà des délimiteurs de mot.
- pour rajouter END à la fin, le mieux, c'est encore :
echo $end >> $file
(simple is beautiful ;)
# heu ...
Posté par gaaaaaAab . En réponse au message sed et caractères spéciaux. Évalué à 4.
Sinon, on l'oublie souvent (voire on le sait pas), mais on peut utiliser n'importe quel caractère comme séparateur pour sed, genre '~'
du coup, sed -e 's~//~#~g' fichier, ça le fait aussi
sed, c'est dien
--> []
[^] # Re: grep
Posté par gaaaaaAab . En réponse au message condition et script shell. Évalué à 2.
[^] # Re: stty columns XX
Posté par gaaaaaAab . En réponse au message Terminal too wide. Évalué à 2.
# changer vi
Posté par gaaaaaAab . En réponse au message Terminal too wide. Évalué à 6.
[^] # Re: question de contrôle ...
Posté par gaaaaaAab . En réponse au message trouver un caractère "nouvelle page" avec grep. Évalué à 2.
en shell, pareil je pense. non ?
[^] # Re: question de contrôle ...
Posté par gaaaaaAab . En réponse au message trouver un caractère "nouvelle page" avec grep. Évalué à 1.
Ctrl-V Ctrl-J
cf : http://blog.robfelty.com/category/perl/
[^] # Re: question de contrôle ...
Posté par gaaaaaAab . En réponse au message trouver un caractère "nouvelle page" avec grep. Évalué à 2.
# question de contrôle ...
Posté par gaaaaaAab . En réponse au message trouver un caractère "nouvelle page" avec grep. Évalué à 6.
si tu tapes le caractère '^' puis le caractère L, ça ne va pas marcher. Il faut faire :
Ctrl + V puis Ctrl + L
ça aide ?
# ordre
Posté par gaaaaaAab . En réponse au message Makefile et petit soucis de liens. Évalué à 4.
dans ton édition de lien, essaie de mettre tes .o en premier, et les libs ensuite et tiens nous au courant !
# [AFUL] groupe détaxe
Posté par gaaaaaAab . En réponse au message un ordinateur portable avec linux ?. Évalué à 3.
http://www.aful.org/wikis/detaxe/PageAccueil
sinon, je voulais, comme toi, un portable sans OS. Pas trouvé rue montgallet. Par contre, Surcouf assemble des portables sans OS. C'est pas forcément le meilleur rapport qualité/prix, je peux pas dire, puisque mon critère principal, c'est que je voulais pas de Windows ... :D
en tout cas, avec le prix d'une licence wIndows en moins, ça m'a paru correct :)
[^] # Re: oui, il peut
Posté par gaaaaaAab . En réponse au message Grep -v d'une liste. Évalué à 1.