Aide commande ed/sed/awk/perl
Résolu/Fermé
A voir également:
- Aide commande ed/sed/awk/perl
- Invite de commande - Guide
- Commande terminal mac - Guide
- Commande dism - Guide
- Diskpart commande - Guide
- Commande scannow - Guide
15 réponses
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
20 mai 2009 à 10:46
20 mai 2009 à 10:46
Salut,
sed '/motcle1/{:z;N;/motcle2$/!bz;s/\n/ /g;s/motcle2/\n&/}';-))
Merci pour la réponse super rapide!
Je viens d'essaye mais j'obtiens cette erreur :
sed: The label /motcle1/{:z;N;/motcle2$/!bz;s/\n/ /g;s/motcle2/\n&/} is greater than eight characters.
Je suis sur un environement UNIX AIX, j'ai la commande sed mais pas gsed, peut être a cause de ça non?
Je viens d'essaye mais j'obtiens cette erreur :
sed: The label /motcle1/{:z;N;/motcle2$/!bz;s/\n/ /g;s/motcle2/\n&/} is greater than eight characters.
Je suis sur un environement UNIX AIX, j'ai la commande sed mais pas gsed, peut être a cause de ça non?
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
20 mai 2009 à 10:59
20 mai 2009 à 10:59
Essaie comme ça alors :
sed ' /motcle1/ { :z N /motcle2$/ !b z s/\n/ /g s/motcle2/\n&/ } '
Comme ça plus d'erreurs mais uniquement les 2 premières lignes affichées :
texte texte texte texte texte
texte texte texte
texte texte texte texte texte
texte texte texte
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
20 mai 2009 à 11:06
20 mai 2009 à 11:06
Bizarre chez moi ça marche bien :
Tu peux faire un copier/coller comme le mien de ce que tu as d'affiché dans ton terminal ?
[tmpfs]$ cat plop texte texte texte texte texte texte texte texte motcle1 texte texte texte texte texte texte motcle2 texte texte texte [tmpfs]$ sed ' /motcle1/ { :z N /motcle2$/ !b z s/\n/ /g s/motcle2/\n&/ } ' plop texte texte texte texte texte texte texte texte motcle1 texte texte texte texte texte texte motcle2 texte texte texte [tmpfs]$;-\ ??
Tu peux faire un copier/coller comme le mien de ce que tu as d'affiché dans ton terminal ?
[test]$ cat sed.txt
texte texte texte texte texte
texte texte texte
motcle1
texte texte
texte
texte texte texte
motcle2
texte texte
texte
[test]$ sed '
> /motcle1/ {
> :z
> N
> /motcle2$/ !b z
> s/\n/ /g
> s/motcle2/\n&/
> }
> ' sed.txt
texte texte texte texte texte
texte texte texte
[test]$
texte texte texte texte texte
texte texte texte
motcle1
texte texte
texte
texte texte texte
motcle2
texte texte
texte
[test]$ sed '
> /motcle1/ {
> :z
> N
> /motcle2$/ !b z
> s/\n/ /g
> s/motcle2/\n&/
> }
> ' sed.txt
texte texte texte texte texte
texte texte texte
[test]$
Non en faite ça fonctionne presque, le fichier sur lequel je testé provenait de windows donc fin de ligne avec \r\n...
Avec le même fichier crééer directement sur le serveur j'obtiens maintenant ça :
texte texte texte texte texte
texte texte texte
motcle1 texte texte texte texte texte texte nmotcle2
texte texte
texte
C'est preque bon il y a un juste un bug juste avant le "motcle2" il a un un "n" au lieu d'un retour a la ligne, je ne sais pas ou est passé l'antislah XD
Bizare surtout que ça fonctionne chez toi...
Avec le même fichier crééer directement sur le serveur j'obtiens maintenant ça :
texte texte texte texte texte
texte texte texte
motcle1 texte texte texte texte texte texte nmotcle2
texte texte
texte
C'est preque bon il y a un juste un bug juste avant le "motcle2" il a un un "n" au lieu d'un retour a la ligne, je ne sais pas ou est passé l'antislah XD
Bizare surtout que ça fonctionne chez toi...
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
20 mai 2009 à 11:27
20 mai 2009 à 11:27
Bizarre effectivement ;-\
Par contre chez moi c'est du GNU/Linux et pas du AIX...
Essaies de supprimer "s/motcle2/\n&/" et refais un test.
Par contre chez moi c'est du GNU/Linux et pas du AIX...
Essaies de supprimer "s/motcle2/\n&/" et refais un test.
J'obtiens ceci :
$ sed '
> /motcle1/ {
> :z
> N
> /motcle2$/ !b z
> s/\n/ /g
> }
> ' sed.txt
texte texte texte texte texte
texte texte texte
motcle1 texte texte texte texte texte texte motcle2
texte texte
texte
$ sed '
> /motcle1/ {
> :z
> N
> /motcle2$/ !b z
> s/\n/ /g
> }
> ' sed.txt
texte texte texte texte texte
texte texte texte
motcle1 texte texte texte texte texte texte motcle2
texte texte
texte
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
20 mai 2009 à 11:40
20 mai 2009 à 11:40
Essaye comme ça :
sed ' /motcle1/ { :z N /motcle2$/ !b z s/\n[^\(mocle2\)]/ /g } '
Presque! de plus en plus pret lol
texte texte texte texte texte
texte texte texte
motcle1 exte texte exte exte texte texte
motcle2
texte texte
texte
le "t" en moins dans "mocle2" c'est fait expres?
Je pensais que c'était une faute de frappe mais en remmettant le t je n'ai plus aucun changement par rapport au fichier d'origine :
texte texte texte texte texte
texte texte texte
motcle1
texte texte
texte
texte texte texte
motcle2
texte texte
texte
texte texte texte texte texte
texte texte texte
motcle1 exte texte exte exte texte texte
motcle2
texte texte
texte
le "t" en moins dans "mocle2" c'est fait expres?
Je pensais que c'était une faute de frappe mais en remmettant le t je n'ai plus aucun changement par rapport au fichier d'origine :
texte texte texte texte texte
texte texte texte
motcle1
texte texte
texte
texte texte texte
motcle2
texte texte
texte
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
20 mai 2009 à 11:54
20 mai 2009 à 11:54
Là je sèche :-((
Chez moi tout marche bien ;-\
Je parierai plus sur le fait que tu sois sur AIX, doit y avoir (je ne sais où) des interactions entre sed et le shell ;-\
Chez moi tout marche bien ;-\
Je parierai plus sur le fait que tu sois sur AIX, doit y avoir (je ne sais où) des interactions entre sed et le shell ;-\
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
20 mai 2009 à 12:32
20 mai 2009 à 12:32
Tu peux toujours essayer avec "ed" :
[tmpfs]$ cat plop texte texte texte texte texte texte texte texte motcle1 texte texte texte texte texte texte motcle2 texte texte texte [tmpfs]$ ed -s plop <<<$'/motcle1/,/motcle2/g/$/s/.$/& /g\n/motcle1/,/motcle2/-1j\nw' [tmpfs]$ cat plop texte texte texte texte texte texte texte texte motcle1 texte texte texte texte texte texte motcle2 texte texte texte [tmpfs]$;-))
Rebonjour!
Non ça ne fonctionne pas sur cette machine avec ed, la shell est ksh ça vient surement de la.
Il faudrait trouver une solution avec awk ou perl...
Non ça ne fonctionne pas sur cette machine avec ed, la shell est ksh ça vient surement de la.
Il faudrait trouver une solution avec awk ou perl...
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
22 mai 2009 à 09:37
22 mai 2009 à 09:37
Salut,
$ cat fichier.txt texte texte texte texte texte texte texte texte motcle1 texte texte texte texte texte texte motcle2 texte texte texte $ perl -ne 's/\n/ / if /motcle1/../motcle2/;s/motcle2 /\nmotcle2\n/;print' fichier.txt texte texte texte texte texte texte texte texte motcle1 texte texte texte texte texte texte motcle2 texte texte texte
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
22 mai 2009 à 09:45
22 mai 2009 à 09:45
Merci ;-))
Salut,
Merci ça fonctionne bien, même un peu trop lol j'explique :
$cat fictest
CONNECT TO ORACLE (&CONXORA);
CREATE TABLE ALIAS.TABLECREEE AS
SELECT ID_PERS,
ID_GRP_PERS, AGE_PERS
NB_ENF, MAX('GRP') AS MAXG
FROM TAB_PERS_GRP_PERS
WHERE DATE_DEB <= &DATE_FIN
AND (DATE_FIN IS NULL OR DATE_DEB > &DATE_FIN)
);
DISCONNECT FROM ORACLE;
perl -ne 's/\n/ / if /SELECT/../FROM/;s/FROM /\nFROM\n/;print' fictest
CONNECT TO ORACLE (&CONXORA);
CREATE TABLE ALIAS.TABLECREEE AS
SELECT ID_PERS, ID_GRP_PERS, AGE_PERS NB_ENF, MAX('GRP') AS MAXG
FROM
TAB_PERS_GRP_PERS WHERE DATE_DEB <= &DATE_FIN
AND (DATE_FIN IS NULL OR DATE_DEB > &DATE_FIN)
);
DISCONNECT
FROM
ORACLE;
Il faudrait que ça change juste entre SELECT et FROM donc ça c'est bon, mais la ça rajoute aussi un retour à la ligne après FROM et des retour à la ligne apres chaque mot de la dernière ligne (si ça peut aider pour ne pas prendre en compte "DISCONNECT FROM ORACLE" , les mots clés "SELECT" et "FROM" sont toujours en début de ligne.
Merci d'avance
Merci ça fonctionne bien, même un peu trop lol j'explique :
$cat fictest
CONNECT TO ORACLE (&CONXORA);
CREATE TABLE ALIAS.TABLECREEE AS
SELECT ID_PERS,
ID_GRP_PERS, AGE_PERS
NB_ENF, MAX('GRP') AS MAXG
FROM TAB_PERS_GRP_PERS
WHERE DATE_DEB <= &DATE_FIN
AND (DATE_FIN IS NULL OR DATE_DEB > &DATE_FIN)
);
DISCONNECT FROM ORACLE;
perl -ne 's/\n/ / if /SELECT/../FROM/;s/FROM /\nFROM\n/;print' fictest
CONNECT TO ORACLE (&CONXORA);
CREATE TABLE ALIAS.TABLECREEE AS
SELECT ID_PERS, ID_GRP_PERS, AGE_PERS NB_ENF, MAX('GRP') AS MAXG
FROM
TAB_PERS_GRP_PERS WHERE DATE_DEB <= &DATE_FIN
AND (DATE_FIN IS NULL OR DATE_DEB > &DATE_FIN)
);
DISCONNECT
FROM
ORACLE;
Il faudrait que ça change juste entre SELECT et FROM donc ça c'est bon, mais la ça rajoute aussi un retour à la ligne après FROM et des retour à la ligne apres chaque mot de la dernière ligne (si ça peut aider pour ne pas prendre en compte "DISCONNECT FROM ORACLE" , les mots clés "SELECT" et "FROM" sont toujours en début de ligne.
Merci d'avance
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
>
vanhell
22 mai 2009 à 10:42
22 mai 2009 à 10:42
Essaye comme ça :
perl -ne 's/\n/ / if /SELECT/../^FROM/;s/^FROM /\nFROM /;print';-))
vanhell
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
22 mai 2009 à 10:52
22 mai 2009 à 10:52
Presque!
Ca fonctionne mais ça enleve toujours le retour a la ligne avant le "WHERE"
J'obtient ça :
CONNECT TO ORACLE (&CONXORA);
CREATE TABLE ALIAS.TABLECREEE AS
SELECT ID_PERS, ID_GRP_PERS, AGE_PERS NB_ENF, MAX('GRP') AS MAXG
FROM TAB_PERS_GRP_PERS WHERE DATE_DEB <= &DATE_FIN
AND (DATE_FIN IS NULL OR DATE_DEB > &DATE_FIN)
);
DISCONNECT FROM ORACLE;
et il faudrait ça :
CONNECT TO ORACLE (&CONXORA);
CREATE TABLE ALIAS.TABLECREEE AS
SELECT ID_PERS, ID_GRP_PERS, AGE_PERS NB_ENF, MAX('GRP') AS MAXG
FROM TAB_PERS_GRP_PERS
WHERE DATE_DEB <= &DATE_FIN
AND (DATE_FIN IS NULL OR DATE_DEB > &DATE_FIN)
);
DISCONNECT FROM ORACLE;
Ca fonctionne mais ça enleve toujours le retour a la ligne avant le "WHERE"
J'obtient ça :
CONNECT TO ORACLE (&CONXORA);
CREATE TABLE ALIAS.TABLECREEE AS
SELECT ID_PERS, ID_GRP_PERS, AGE_PERS NB_ENF, MAX('GRP') AS MAXG
FROM TAB_PERS_GRP_PERS WHERE DATE_DEB <= &DATE_FIN
AND (DATE_FIN IS NULL OR DATE_DEB > &DATE_FIN)
);
DISCONNECT FROM ORACLE;
et il faudrait ça :
CONNECT TO ORACLE (&CONXORA);
CREATE TABLE ALIAS.TABLECREEE AS
SELECT ID_PERS, ID_GRP_PERS, AGE_PERS NB_ENF, MAX('GRP') AS MAXG
FROM TAB_PERS_GRP_PERS
WHERE DATE_DEB <= &DATE_FIN
AND (DATE_FIN IS NULL OR DATE_DEB > &DATE_FIN)
);
DISCONNECT FROM ORACLE;
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
>
vanhell
22 mai 2009 à 11:00
22 mai 2009 à 11:00
Va falloir attendre lami20j, n'étant pas un grand spécialiste de Perl pour ma part, désolé ;-(
Sinon, j'ai ça avec "ed" (essaie on sait jamais) :
Sinon, j'ai ça avec "ed" (essaie on sait jamais) :
echo 'H /SELECT/,/^FROM/g/$/s/.$/& /g /SELECT/,/^FROM/-1j ,p' | ed -s fic;-))
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
22 mai 2009 à 09:44
22 mai 2009 à 09:44
Et comme ça :
Édit : C'est plus simple comme ça...
Version affichage :
[tmpfs]$ echo 'H /motcle1/,/motcle2/g/$/s/.$/& /g /motcle1/,/motcle2/-1j . w' | ed -s plop???
Édit : C'est plus simple comme ça...
Version affichage :
$ echo '/motcle1/,/motcle2/g/$/s/.$/& /g /motcle1/,/motcle2/-1j ,p' | ed -s plop texte texte texte texte texte texte texte texte motcle1 texte texte texte texte texte texte motcle2 texte texte texteVersion écriture :
$ echo '/motcle1/,/motcle2/g/$/s/.$/& /g /motcle1/,/motcle2/-1j w' | ed -s plop;-))