Problème shell expressions régulières
Résolu
lookouster
Messages postés
58
Statut
Membre
-
jipicy Messages postés 41342 Statut Modérateur -
jipicy Messages postés 41342 Statut Modérateur -
Bonjour.
Je suis débutant en shell.
J'aimerais savoir s'il m'est possible avec les expressions réulières et sed de supprimer une ligne qui se termine par "00000" suivi de 11 caractères (numériques ou espace) suivi enfin de 0.
j'ai pensé à
sed -i "/.00000[0-9]..........mais pour précisé la suite oufff
J'ai tt essayé mais en vain.
Merci
Je suis débutant en shell.
J'aimerais savoir s'il m'est possible avec les expressions réulières et sed de supprimer une ligne qui se termine par "00000" suivi de 11 caractères (numériques ou espace) suivi enfin de 0.
j'ai pensé à
sed -i "/.00000[0-9]..........mais pour précisé la suite oufff
J'ai tt essayé mais en vain.
Merci
A voir également:
- Problème shell expressions régulières
- Classic shell - Télécharger - Personnalisation
- Secure shell - Télécharger - Divers Web & Internet
- Shell infrastructure host c'est quoi - Guide
- Shell startup windows 10 - Guide
- Shell do while ✓ - Forum Shell
14 réponses
Salut,
j'ai pensé à ceci :
je ne sais pas si cela fonctionne ! A adapter bien sûr !
:-))
j'ai pensé à ceci :
sed '/[00000]/,/[0]/d' fichier
je ne sais pas si cela fonctionne ! A adapter bien sûr !
:-))
Effectivement dans mon 1er post je n'ai pas utilisé le paramètre "-i" parce que je fais toujours des essais en affichant la sortie sur l'écran au cas ou...
De toute façon mieux vaut privilégier le paramètre "-i.bak" qui crée un fichier de sauvegarde.
Ensuite concernant tes expressions, si tu veux les écrire comme tel, alors tout comme dans mon exemple il faut utiliser le paramètre "-r" (utilisation des expressions régulières) ce qui évite de devoir protéger les parenthèses et les accolades entre autre...
Tes expressions essayes-les comme ça:
De toute façon mieux vaut privilégier le paramètre "-i.bak" qui crée un fichier de sauvegarde.
Ensuite concernant tes expressions, si tu veux les écrire comme tel, alors tout comme dans mon exemple il faut utiliser le paramètre "-r" (utilisation des expressions régulières) ce qui évite de devoir protéger les parenthèses et les accolades entre autre...
Tes expressions essayes-les comme ça:
sed -r '/^.{53}0{5}/d' fichier
sed '/^\.{53\}0\{5\}/d' fichierpour fin :sed -r '/0{5}.{14}$/d' fichier
sed '/0{\5\}.\{14\}$/d' fichier;-))
Salut
Merci pour vos posts respectifs; dsl hier cétè chomé dc j'étais pas au boulot.
Au fait, les tests ke je menais étaient sur mon pc en local, j'ai fini par avoir la solution hier.
sed -i "/00000[0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ]0.$/d" fichier
quand je lui dis 0{5} ou [0-9 ], il ne prend pas.
Mais anyway, actu j'ai un autre problème.
En effet le serveur sur lekel le truc est supposé tourné est sous HP-UX. Pour la commande sed, il n'y a que les options -n , -e, -f.
J'ai essayé de réécrire mon bout de code coe suit.
sed -n "/00000[0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ]0.$/w resultat" fichier
pour avoir lees lignes qui contiennent les 5*0 successifs suivis de la suite till the end.
bien sur cela marche; mais je cherche les lignes qui n'ont pas les 5*0 aussi. C'est clair je pense que cè l'opposé; il me faut un "^" mais je n'arrive pas à le mettre où il faut on dirait. j'ai essayé (^00000), [^00000], sans resultat.
Merci
Merci pour vos posts respectifs; dsl hier cétè chomé dc j'étais pas au boulot.
Au fait, les tests ke je menais étaient sur mon pc en local, j'ai fini par avoir la solution hier.
sed -i "/00000[0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ]0.$/d" fichier
quand je lui dis 0{5} ou [0-9 ], il ne prend pas.
Mais anyway, actu j'ai un autre problème.
En effet le serveur sur lekel le truc est supposé tourné est sous HP-UX. Pour la commande sed, il n'y a que les options -n , -e, -f.
J'ai essayé de réécrire mon bout de code coe suit.
sed -n "/00000[0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ][0-9 ]0.$/w resultat" fichier
pour avoir lees lignes qui contiennent les 5*0 successifs suivis de la suite till the end.
bien sur cela marche; mais je cherche les lignes qui n'ont pas les 5*0 aussi. C'est clair je pense que cè l'opposé; il me faut un "^" mais je n'arrive pas à le mettre où il faut on dirait. j'ai essayé (^00000), [^00000], sans resultat.
Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bon c'est good cette fois ;-))
Est-ce que tu peux essayer ça dans un premier temps :
Est-ce que tu peux essayer ça dans un premier temps :
sed '/0\{5\}.\{14\}$/d' fichieretsed '/0\{5\}.\{14\}$/!d' fichier;-))
Cool, c'est djà bien. Il fallait donc le backslash d'ininterprètation lol pour simplifier l'écriture.
Now, il me faudra rediriger chacun des deux vers deux différents fichiers. Avec sed c'est l'option /pattern/w ke j connais, mais là ya djà un d, on fait koi alors?
Now, il me faudra rediriger chacun des deux vers deux différents fichiers. Avec sed c'est l'option /pattern/w ke j connais, mais là ya djà un d, on fait koi alors?
Je me souviens d'avoir essayé le echo une fois avt ki ne marchait pas avt mais là on dirait bien ke ça marche. C'était sur une autre becane avt
Merci
Merci
Tu peux aussi faire comme ça :
sed -n '/0\{5\}.\{14\}$/!w fichier1' fichier
sed -n '/0\{5\}.\{14\}$/w fichier2' fichier:-))
J'ai essayé ton code mais ça me fait juste un cat du fichier.
Au fait j'ai un fichier qui tient sur 72 caractères (numérique et espace)
Je veux supprimer les lignes dont la sous-chaine du 54ième au 58ième caractère donne "00000".
J'ai le choix alors une chaine commençant par [0-9 ]{53}0{5} ou alors j'y vais pour une chaine qui se termine par 0{5}[0-9 ]{13}0.
Les syntaxes ke j'utilisent dans les deux cas sont:
Pour debut:
sed -i '/^([0-9 ]{53}0{5})/d' fichier
pour fin:
sed -i '/(0{5}[0-9 ]{14})$/d' fichier
J'ai surement dû me gourrer somewhere
help me!!!!!!!!!!!!!