Insert sioux [AWK | SED] - Shell/Batch - Programmation
Marsh Posté le 10-09-2004 à 18:48:18
je comprends pas, si tu fais un portage Solaris -> Linux, où est le problème ?
Marsh Posté le 10-09-2004 à 18:57:05
Le problème est que si tu fournis ce code à cpp :
Code :
|
en sortie, tu auras
Code :
|
dans le cas du C/C++, ça ne pose pas de problème, dans le cas du langage que je dois compiler, ça pose problème, car "\" est un mot clé, et s'il disparait du fichier, bah ça ne marche plus !
cpp sous SUN4 ne mange pas les fin de ligne précédées de "\"...
Donc pour simplifier, ajouter " " à la fin de chaque ligne, même celles qui se terminent par "\" (toutes les lignes, car il y a un autre problème, mais pas besoin d'en parler)
Marsh Posté le 10-09-2004 à 19:10:12
cpp : C Pre Processor
il fait ce qu'il doit faire. si tu l'utilise pour autre chose, tu t'exposes à de sacré problème.
Marsh Posté le 10-09-2004 à 19:23:34
Taz a écrit : cpp : C Pre Processor |
Tu es hors sujet là
Mais je vois que tu es égal à toi même sur tous les forums dev, au moins je suis pas dépaysé
cpp a changé de comportement entre 1988 et aujourd'hui, comment ils pouvaient prévoir que le \ deviendrait aussi important, hein ?
Bon, ce n'est pas un sujet sur cpp, alors passons...
Quelqu'un a une idée pour générer ce fichier avec awk ou sed ? Je voudrais éviter PERL car ce n'est pas forcément dans les distrib de base
Marsh Posté le 10-09-2004 à 21:01:33
Taz a écrit : perl pas dans une distrib de base ? |
+1
jai jamais rien vu qui avait pas perl
une LFS, une debian, AIX, solaris, ca l'a tjrs perl (et j'ai jamais vu en dessous de 5.05.02 => 5.5.2)
Marsh Posté le 10-09-2004 à 21:04:42
bon admettons... on peut donc ajouter PERL à la liste des solutions possible...
Marsh Posté le 10-09-2004 à 21:15:48
|
pas testé mais devrait fonctionné
en gros tu veux seulement ajouter un espace après chaque ligne
Marsh Posté le 10-09-2004 à 22:25:50
C'est nickel ! Merci beaucoup à toi
Je vais voir si je peux pas adapter à sed avec une syntaxe équivalente pour la substitution, et si je trouve pas, ça marchera avec Perl
Marsh Posté le 10-09-2004 à 22:27:47
en gros burger t'as craché la solution toute prête ... et toi tu parles toujours de sed ... mais vas-y, on l'attend toujours ton code sed ...
Marsh Posté le 10-09-2004 à 22:31:55
Taz a écrit : en gros burger t'as craché la solution toute prête ... et toi tu parles toujours de sed ... mais vas-y, on l'attend toujours ton code sed ... |
c'est son choix, on peut lui en vouloir de tenter le coup s'il préfère sed
Marsh Posté le 10-09-2004 à 22:38:11
non, moi je lui reproche de faire un sujet hors charte, toi tu t'ennuies à lui faire son truc, et il te répond qu'il préfère sed ... mais on a pas vu une seule ligne de sed alors ...
Marsh Posté le 10-09-2004 à 22:40:49
Taz a écrit : en gros burger t'as craché la solution toute prête ... et toi tu parles toujours de sed ... mais vas-y, on l'attend toujours ton code sed ... |
Je ne crache sur rien du tout
J'ai remercié BurgerGold, mais effectivement, je préfèrerais avoir une ligne sed, même si c'est illisible, plutôt que d'avoir à appeler un script depuis un compilateur.
Et puis je ne pense pas avoir à recevoir de leçon de ta part... La moitié de tes posts dans la section dev ne servent à rien, tu détourne tous les posts, tu as été, comme souvent, d'une inutilité absolue ici...
Mais on y peut rien, c'est la mentalité de beaucoup de développeurs ici. Heureusement qu'il reste des personnes compétentes ET pas imbues de leur personne... Merci encore BurgerGold
Marsh Posté le 10-09-2004 à 22:44:08
Taz a écrit : non, moi je lui reproche de faire un sujet hors charte |
En quoi il est hors charte mon sujet ?
Et puis toi, arrête de penser à la place des autres, tu ne connais pas les contraintes, mais tu crois pourtant tout savoir
Je déteste sed, je le trouve ignoble, je préfère Perl (du moins à l'époque lointaine où j'avais fait 2-3 trucs avec, ça devait être... Non je préfère pas y penser ), mais si je veux l'utiliser c'est qu'il y a une raison
Marsh Posté le 10-09-2004 à 22:46:40
il est hors charte dans le sens où tu demandes du code. on fait pas de résolution d'exercice ni de travail à l'oeil. si tu veux qu'on t'aide avec sed, on veut bien, mais faut que tu montres ou tu en es. sinon, RTFM
Marsh Posté le 10-09-2004 à 23:05:44
En utilisant l'expression régulière de BurgerGold, j'arrive à avoir un fichier de sortie qui a la même fin de ligne qu'en entrée. Le \ avant la fin de ligne est donc correctement géré, mais il n'ajoute pas d'espace...
Code :
|
Apparemment il ne prend pas en compte l'espace dans la seconde chaîne de substitution. En en mettant plusieurs, le résultat est le même
Marsh Posté le 10-09-2004 à 23:12:57
Taz a écrit : sed 's/$/ /g' |
ça marche, merci beaucoup
il me manquait le global, par contre je ne comprends pas pourquoi ça ne marche pas ainsi :
sed 's/$\n/ \n/g'
EDIT : quand j'y réfléchis c'est con de mettre l'\n dedans des 2 côtés
Merci à vous deux
Marsh Posté le 10-09-2004 à 23:16:03
parce que sed fonctionne en mode ligne et que la fin de ligne c'est $ et rien d'autre
Marsh Posté le 11-09-2004 à 05:56:18
Taz a écrit : non, moi je lui reproche de faire un sujet hors charte, toi tu t'ennuies à lui faire son truc, et il te répond qu'il préfère sed ... mais on a pas vu une seule ligne de sed alors ... |
si je l'ai fait c'est parce que ca me faisait plaisir
Marsh Posté le 12-09-2004 à 03:05:50
J'ai peut-être loupé un truc, mais je comprend pas vraiment pourquoi t'as besoin de tant de lignes pour faire ça en perl. « perl -i -pe 's/$/ /' » ça suffit, non ?
Marsh Posté le 12-09-2004 à 06:55:00
matafan a écrit : J'ai peut-être loupé un truc, mais je comprend pas vraiment pourquoi t'as besoin de tant de lignes pour faire ça en perl. « perl -i -pe 's/$/ /' » ça suffit, non ? |
possible, jai jamais vraiment utilisé perl en ligne de commande
moi je fais carrément du script, je fais la lecture, le remplacement lorsque ya un retour de ligne et lorsquien a pas, puis je réécris
si tu dis que ta méthode fonctionne, bin là c'est clair que se casser la tête avec sed ca sert à rien
Marsh Posté le 12-09-2004 à 15:57:42
D'ailleurs c'est un aspect un peu méconnu de Perl mais ma ligne de commande marche aussi sur un fichier en faisant « perl -i -pe 's/$/ /' file_name ». En effet l'opérateur angle (<> ) fonctionne sur l'entrée par défaut, qui n'est pas forcément stdin. Si on donne un fichier en argument à Perl l'entrée par défaut est ce fichier.
Marsh Posté le 10-09-2004 à 18:44:33
Bonjour,
C'est mon premier post dans la section script, donc bonjour à ceux qui me connaissent pas
Bon entrons dans le vif du sujet... Pour un portage UNIX -> Linux, j'ai besoin de :
Ajouter un espace à chaque fin de ligne
Avec la contrainte suivante :
doit être considéré comme 2 lignes, on devrait donc récupérer :
Où "_" représente " "
Pour les curieux, le vieux cpp disponible sur les vieux SUN n'intérprète pas le "\" en fin de ligne comme une indication que la ligne continue. Et ça nous arrange, car le "\" est un symbole du langage. Ne me dites pas "BOUH C'EST PAS BIEN", je le sais, mais ce langage existe depuis les années 80
Et donc en portant le compilateur sous Linux, la ligne est fusionné avec la ligne du dessous, et le symbole "\" disparait
Merci pour votre aide
Message édité par Predicator le 10-09-2004 à 18:45:39